链表删除没有缓冲区的重复项

Linkedlist Remove Duplicates without buffer

我正在尝试实现一种算法以从链表中删除重复项,但在检查当前节点是否具有与下一个节点相同的数据时,我的算法冻结了。

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()

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

在你的 while 循环中:

runner = current.next

应该是

runner = runner.next

否则它只会在每次迭代中保持相同的 current.next,因为它在循环中永远不会改变 current。同样修复了几行。