Python链表删除重复项
我正试图写一个代码来删除排序链表“head”中的重复项。如果列表以重复项结尾,我下面的代码总是返回最后一个重复项。例如,Python链表删除重复项,python,Python,我正试图写一个代码来删除排序链表“head”中的重复项。如果列表以重复项结尾,我下面的代码总是返回最后一个重复项。例如,[1,2,2,3,3]将返回[1,2,3,3]。我不明白为什么。有人有主意吗 class Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ if
[1,2,2,3,3]
将返回[1,2,3,3]
。我不明白为什么。有人有主意吗
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return head
l1=newhead=ListNode(head.val)
head=head.next
while head:
if head.val!=l1.val:
l1.next=head
l1=l1.next
head=head.next
return newhead
您应该跟踪每个新值的前导节点,并不断获取下一个节点,直到获得具有不同值的节点,此时您将该节点指定为前导节点的下一个节点:
class Solution(object):
def deleteDuplicates(self, head):
node = head
while node:
lead = node
while node.next and node.next.val == lead.val:
node = node.next
node = lead.next = node.next
return head
问题解决方案
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.last_node = None
def append(self, data):
if self.last_node is None:
self.head = Node(data)
self.last_node = self.head
else:
self.last_node.next = Node(data)
self.last_node = self.last_node.next
def get_prev_node(self, ref_node):
current = self.head
while (current and current.next != ref_node):
current = current.next
return current
def remove(self, node):
prev_node = self.get_prev_node(node)
if prev_node is None:
self.head = self.head.next
else:
prev_node.next = node.next
def display(self):
current = self.head
while current:
print(current.data, end = ' ')
current = current.next
def remove_duplicates(llist):
current1 = llist.head
while current1:
data = current1.data
current2 = current1.next
while current2:
if current2.data == data:
llist.remove(current2)
current2 = current2.next
current1 = current1.next
a_llist = LinkedList()
data_list = input('Please enter the elements in the linked list: ').split()
for data in data_list:
a_llist.append(int(data))
remove_duplicates(a_llist)
print('The list with duplicates removed: ')
a_llist.display()
节目说明
如果要删除所有重复项,您可以始终使用
set
@Mstaino您可以在链接列表上使用set操作吗?看起来您的while循环中缺少了一个elsehead
只应变为head。下一步
当值不匹配时,不是循环中的每一圈。@Mike仍然尝试了相同的问题