2015-02-03 3 views
0

목록에서 최소 숫자를 찾으려는 My UnorderedList : 클래스의 find_min() 메소드를 작성하려고합니다.Python 링크 된 노드 목록 : 최소값 찾으십시오

def find_min(self): 
    current = self.head 
    previous = None 
    found = False 
    while not found: 
     if current.getData == None: 
      found = True 
      minimum = "None" 
     else: 
    #this is where i got stuck.... 

이 메서드는 목록이 비어 있으면 "없음"을 반환합니다. Previous와 Current를 사용하여 노드를 가로 지르며 서로를 비교하여 최소값이 무엇인지 확인했지만 실패했습니다.

또한 제대로 작동하지 않는 clear/delete_all 메서드를 만들었습니다. 목록에서 모든 항목을 지우고 빈 목록을 남기게됩니다.

def clear(self): 
    current = self.head 
    current.setNext(None) 
    endOfList = current.getData() 
    self.remove(endOfList) 

다음은 나머지 두 클래스입니다.

class Node: 
def __init__(self,initdata): 
    self.data = initdata 
    self.next = None 

def getData(self): 
    return self.data 

def getNext(self): 
    return self.next 

def setData(self,newdata): 
    self.data = newdata 

def setNext(self,newnext): 
    self.next = newnext 

class UnorderedList: 

def __init__(self): 
    self.head = None 
    self.count = 0 

def isEmpty(self): 
    return self.head == None 

def add(self,item): 
    temp = Node(item) 
    temp.setNext(self.head) 
    self.head = temp 

def size(self): 
    current = self.head 
    count = 0 
    while current != None: 
     count = count + 1 
     current = current.getNext() 
    return count 

def search(self,item): 
    current = self.head 
    found = False 
    while current != None and not found: 
     if current.getData() == item: 
      found = True 
     else: 
      current = current.getNext() 
    return found 

def remove(self,item): 
    current = self.head 
    previous = None 
    found = False 
    while not found: 
     if current.getData() == item: 
      found = True 
     else: 
      previous = current 
      current = current.getNext() 

    if previous == None: 
     self.head = current.getNext() 
    else: 
     previous.setNext(current.getNext()) 

def __str__(self): 
    result = '[' 
    current = self.head 
    while current != None: 
     result += str(current.getData()) + ', ' 
     current = current.getNext() 
    result += ']' 
    return result 

def append(self, item): 
    current = self.head 
    while current.getNext() != None: 
     current = current.getNext() 
    current.setNext(Node(item)) 

def pop(self): 
    current = self.head 
    found = False 
    endOfList = None 
    while current != None and not found: 
     if current.getNext() == None: 
      found = True 
      endOfList = current.getData() 
      self.remove(endOfList) 
     else: 
      current = current.getNext() 

def clear(self): 
    current = self.head 
    current.setNext(None) 
    endOfList = current.getData() 
    self.remove(endOfList) 

어떤 도움을 주셔서 감사합니다.

+0

정확하게 현재 코드의 문제점을 자세히 설명해 주시겠습니까? 예상 출력은 실제 출력과 어떻게 다릅니 까? – ApproachingDarknessFish

답변

2

최소값을 찾으려면 간단히 목록을 반복하십시오. 더 쉽게 비교할 수 있도록 float('inf')을 초기 값으로 사용할 수 있습니다. 청소를 나열으로

def find_min(self): 
    next_node = self.head 
    if next_node is None: 
     return None 

    minimum = float('inf')   
    while next_node: 
     value = next_node.getData() 
     if value < minimum: 
      minimum = value 

     next_node = next_node.getNext() 

    return minimum 

, 당신이 할 필요가 Noneself.head 설정됩니다. 가비지 컬렉터가 나머지 작업을 수행합니다.

def clear(self): 
    self.head = None 
    self.count = 0