2014-10-07 107 views
0

這個python程序是一個有序鏈接列表,用於跟蹤一行中的名稱。我正在爲joinFriend函數掙扎。我需要在「第一人」之後的位置添加「人物第二」。如果第一個不在線,我必須提供一個錯誤消息。誰能幫忙?我沒有做那個偉大的類:'(在有序鏈接列表中插入一個元素

class PersonList(object): 
#constructor initializes both instance variables 
    def __init__(self, name): 
     self.name = name 
     self.next = None 

    def getName(self): 
    #returns the name of the person 
     return self.name 
    def getNext(self): 
    #returns a PersonList object with the next person in line 
     return self.next 

    def setName(self, newname): 
     self.name = newname 
    def setNext(self, newnext): 
     self.next = newnext 

#Line class 
class Line(object): 
    def __init__(self): 
     self.head = None 

    def isEmpty(self): 
     #constructor initializes an empty linked list 
     return self.head == None 

    def __str__(self): 
    #prints the people currently in line, in order, 
     #with a number indicating their position 
     current = self.head 
     string = '' 
     count = 0 
     while current != None: 
      count = count + 1 
      string += str(count) + " " + current.getName() + "\n" 
      current = current.getNext() 
     return string 

    def add(self,name): 
    #adds a person to the END of the line 
     current = self.head   
     temp = PersonList(name)   
     if current == None: 
      self.head = temp 
     else: 
      while current.getNext() != None: 
       current = current.getNext()     
      current.setNext(temp) 

    def remove(self, name): 
    #removes a person from the line 
     current = self.head 
     previous = None 
     found = False 
     while not found: 
      if current.getName() == name: 
       found = True 
      else: 
       previous = current 
       current = current.getNext() 

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

    def joinFriend(first, second): 
     current = self.head 
     previous = None 
     found = False 
     while not found: 
      if current.getName() == first: 
       found = True 
      else: 
       previous = current 
       current = current.getNext() 

     second = PersonList(name) 
     if previous == None: 
      temp.setNext(self.head) 
      self.head = temp 
     else: 
      temp.setNext(current) 
      previous.setNext(second) 


def main(): 
    ln = Line() 
    ln.add("John") 
    ln.add("Mary") 
    ln.add("Alec") 
    ln.add("Celia") 
    ln.remove("Mary") 
    ln.joinFriend("John", "Mike") 
    ln.joinFriend("Celia", "Jim") 
    print(ln) 

main() 
+0

你的預期輸出是什麼? – 2014-10-07 02:36:28

+0

相關:[Pyth在鏈接列表O(1)插入/刪除](http://stackoverflow.com/q/2154946/608639)。 – jww 2014-10-07 03:46:19

回答

0

請嘗試使用此:

def joinFriend(self, first, second): 
     current = self.head 
     previous = None 
     found = False 
     while not found: 
      try: 
       if current.getName() == first: 
        found = True 
       else: 
        previous = current 
        current = previous.getNext() 
      except Exception: 
       print "Error: First person [%s] not found in the list" % first 
       sys.exit(1) 

     temp = PersonList(second) 
     next_item = current.getNext() 
     current.setNext(temp) 
     temp.setNext(next_item) 

輸出:

1 John 
2 Mike 
3 Alec 
4 Celia 
5 Jim 

輸出:(帶除外)

ln.joinFriend("James", "Jim") 

Error: First person [James] not found in the list