题目描述:
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
思路:
h -> 1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5
pre cur
我们始终要让 pre 在 cur 的前面,通过判断 cur.val == cur.next.val
判断重复元素是否存在。
h -> 1 -> 2 3 3 4 -> 4 -> 5
| |
----------------
pre cur
如果存在重复元素的话,我们pre.next=cur.next;cur=cur.next
,如果不存在重复元素,我们pre=cur;cur=cur.next
,所以这里我们要通过一个变量标记是否存在重复元素。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head==null || head.next==null){
return head;
}
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode pre = dummyHead;
ListNode cur = dummyHead.next;
while(cur!=null){
boolean isdup = false;
while(cur.next!=null && cur.val == cur.next.val){
isdup = true;
cur=cur.next;
}
if(isdup){
cur = cur.next;
pre.next = cur;
}else{
pre = cur;
cur = cur.next;
}
}
return dummyHead.next;
}
}