不允许使用额外数据结构。
代码:
class Node:
def __init__(self, data=None):
self.next = None
self.data = data
def get_data(self):
return self.data
def get_next(self):
return self.next
def remove_after(self):
self.next = self.next.next
class LinkedList:
def __init__(self):
self.__head = None
def __str__(self):
p = self.__head
res = []
while p:
if p.get_data():
res.append(p.get_data())
p = p.get_next()
return "[" + ", ".join([str(_) for _ in res]) + "]"
def get_head(self):
return self.__head
def add_node(self, node: Node):
if not self.__head:
self.__head = node
else:
p = self.__head
while p.get_next():
p = p.get_next()
p.next = node
def remove_duplicates(linkedlist: LinkedList):
p = linkedlist.get_head()
q = p.get_next()
d = {p.get_data(): True}
while p and q:
if q.get_data() in d:
p.remove_after()
q = p.get_next()
continue
elif q.get_data():
d[q.get_data()] = True
p = p.get_next()
q = p.get_next()
l = LinkedList()
l.add_node(Node(1))
l.add_node(Node(2))
l.add_node(Node(1))
l.add_node(Node(2))
l.add_node(Node(1))
print(l)
remove_duplicates(l)
print(l)
输出:
[1, 2, 1, 2, 1]
[1, 2]