Python Linkedlist删除不带缓冲区的重复项
我正在尝试实现一种算法,以从linkedlist中删除重复项,但在检查当前节点的数据是否与下一个节点的数据相等时,我的算法冻结Python Linkedlist删除不带缓冲区的重复项,python,linked-list,Python,Linked List,我正在尝试实现一种算法,以从linkedlist中删除重复项,但在检查当前节点的数据是否与下一个节点的数据相等时,我的算法冻结 class Node: def __init__(self, data, next): self.data = data self.next = next class LinkedList: def __init__(self, head = None): self.head = head def ad
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
。前面几行也是一样。你说得对!泰。事实上,我很困惑,我创造了跑步者来避免改变外环的指针,然后在我的脑海中出现了“电流”的想法。用一双新的眼睛来观察这些东西总是比较容易的。在调试器中单步执行是值得的,特别是当你无法让别人检查你的代码时,看看现实和你的期望是什么。下一步=当前。下一步。下一步也应该是runner.next=runner.next。下一步next
是python关键字。使用其他名称以避免混淆。