📅  最后修改于: 2023-12-03 15:28:43.542000             🧑  作者: Mango
给定一个单向链表,删除其中所有值为重复值的节点,并返回链表的头部指针。例如,对于链表1->2->3->3->4->4->5,返回链表1->2->5。
首先可以将链表中存在重复值的节点进行删除操作。该题可以遍历整个链表,同时检测每一个节点的值是否与前一个节点的值相等,如果相等,那么就删除该节点。为了方便删除链表中的节点,需要在链表头部添加一个虚拟节点dummy。
首先定义一个虚拟节点dummy,并将其next指向head,然后定义两个指针,分别为prev和cur,分别指向虚拟节点dummy和第一个节点head。在遍历的过程中,如果发现cur.val等于cur.next.val,那么就需要删除cur,并将prev的next指向cur.next,否则就让prev指向cur,cur指向cur.next。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def delete_duplicates(head):
dummy = ListNode(0)
dummy.next = head
prev, cur = dummy, head
while cur:
while cur.next and cur.val == cur.next.val:
cur = cur.next
if prev.next == cur:
prev = prev.next
else:
prev.next = cur.next
cur = cur.next
return dummy.next
时间复杂度:O(n),其中n是链表中节点的数目。
空间复杂度:O(1)。