https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
public ListNode deleteDuplicates(ListNode head)
这一题比上一题稍微修改了一下条件,上一题还会保留一个,这一题只要重复毛都没有。于是乎一个tmp指针是不够用的,所以我们需要引用到prev的概念,同时我们还要注意到的是整个链表的头指针也可能会被作废,所以需要更新头指针。另外,我这里加了一个Boolean变量来判断当前tmp是否一个出现过重复的指针。下面就直接给出代码:
public ListNode deleteDuplicates(ListNode head) {
ListNode newHead = null, prev = null, tmp = head;
boolean duplicate = false;
while(tmp != null){
if(tmp.next != null && tmp.next.val == tmp.val){
duplicate = true;
}else{
if(duplicate){
if(prev != null)
prev.next = tmp.next;
}else{
if(newHead == null)
newHead = tmp;
prev = tmp;
}
duplicate = false;
}
tmp = tmp.next;
}
return newHead;
}
本博客介绍了解决删除排序链表中所有重复元素的算法,仅保留不重复的元素。通过引入prev指针和一个布尔变量duplicate,实现链表节点的高效过滤。
127

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



