给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:快慢指针以及前驱指针。快指针遍历到与慢指针不同的节点,如果慢指针的next不是快指针则消除慢指针的值。
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null) return head;
ListNode result = new ListNode(0);
result.next = head;
ListNode prev = result;
ListNode f = head;
ListNode s = head;
while(f.next != null){
f = f.next;
if(s.val == f.val){
continue;
}else{
if(s.next == f){
prev = s;
s =f;
}else{
prev.next = f;
s =f;
}
}
}
if(s.next != null){
prev.next = null;
}
return result.next;
}
}