一、题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
二、解题思路
如果指针指向结点值等于后一个结点值,将指针移动到当前结点后第一个值不同的结点,继续遍历。
三、编程实现
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null || pHead.next == null) {
return pHead;
}
// 如果此时结点值等于后一个结点值
if (pHead.val == pHead.next.val) {
ListNode pNode = pHead.next;
while (pNode != null && pNode.val == pHead.val) {
// 直至移动到第一个值不同的结点
pNode = pNode.next;
}
// 继续遍历
return deleteDuplication(pNode);
} else {
// 值不相等则链接
pHead.next = deleteDuplication(pHead.next);
return pHead;
}
}
}
本文介绍了一种在排序链表中删除重复节点的算法。通过遍历链表,当遇到重复节点时,跳过所有重复的节点直到找到值不同的节点,从而保留链表的唯一元素。算法使用递归方式实现,提高了代码的简洁性和可读性。

被折叠的 条评论
为什么被折叠?



