2015-10-20 70 views
0

我想实现一个算法,以从链表中删除重复,但我的算法冻结,当它来检查当前节点是否有数据与下一个相等。链接列表删除重复没有缓冲区

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

class LinkedList: 
    def __init__(self, head = None): 
     self.head = head 

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

    def printit(self): 
     current = self.head 
     while current is not None: 
     print(current.data) 
     current = current.next 

    def removeDuplicates(self): 
     current = self.head 
     while current != None: 
     runner = current 
     while runner.next != None: 
      if runner.next.data == current.data: 
       runner.next = current.next.next 
      else: 
       runner = current.next 
     current = current.next 




mylist = LinkedList() 

mylist.add(31) 
mylist.add(77) 
mylist.add(31) 
mylist.add(22) 
mylist.add(22) 
mylist.add(22) 

mylist.printit() 
mylist.removeDuplicates() 
mylist.printit() 

这可能真的很愚蠢,但我现在无法发现它,有什么想法吗?

+1

'next'是一个python关键字。使用其他名称以避免混淆。 – kmad1729

回答

2

在while循环:

runner = current.next 

应该

runner = runner.next 

否则它只是不断走在每次迭代相同current.next,因为它从来没有在循环会改变current。同样修复了几行。

+0

你是对的! TY。其实我很困惑,我创建了跑步者,以避免改变外部循环的指针,然后在我脑海中就是“当前”的想法。 – John

+0

用新鲜的眼睛看这东西总是比较容易。在调试器中单步调试是值得的,特别是如果你不能让某人审查你的代码,看看现实和你的期望是否属于公司。 – Useless

+0

'runner.next = current.next.next'也应该是'runner.next = runner.next.next'。 – kmad1729