返回
剑指 Offer 83:删除排序链表中的重复元素,你的程序排好了吗?
前端
2023-10-18 10:21:13
一、题目
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入:1->1->2->3->3
输出:1->2->3
示例 2:
输入:1->1->1->2->3
输出:1->2->3
二、思路分析
这道题要求删除排序链表中的重复元素,我们可以利用链表有序的特性来解决这个问题。由于链表中的元素是升序排列的,因此重复元素一定是相邻的。我们可以遍历链表,将当前节点与下一个节点进行比较,如果两个节点的值相等,则删除当前节点,否则将当前节点保留。
三、解题代码
def deleteDuplicates(head):
"""
删除排序链表中的重复元素
参数:
head: 链表头节点
返回值:
无重复元素的链表头节点
"""
# 判断链表是否为空
if head is None:
return None
# 设置一个哑节点作为新的链表的头节点
dummy = ListNode(0)
dummy.next = head
# 设置一个指针指向哑节点
prev = dummy
# 遍历链表
while head is not None:
# 判断当前节点是否与下一个节点的值相等
if head.val == head.next.val:
# 如果相等,则跳过当前节点
while head.next is not None and head.val == head.next.val:
head = head.next
# 将当前节点的下一个节点赋给prev节点的下一个节点
prev.next = head.next
else:
# 如果不相等,则将当前节点的下一个节点赋给prev节点的下一个节点
prev.next = head
# 将prev节点的下一个节点设置为head节点
prev = head
# 将head节点的下一个节点设置为下一个节点
head = head.next
# 返回哑节点的下一个节点作为无重复元素的链表的头节点
return dummy.next
四、总结
这道题是一道经典的链表操作题,考察的是对链表的理解和操作能力。通过利用链表有序的特性,我们可以轻松地解决这道题。希望本文对您有所帮助,如果您有任何问题,请随时留言。