给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
解答:
首先此链表是排序的链表,不会出现相同的元素中间有其它的元素。
解法:

public static ListNode deleteDuplicates(ListNode head) {
/*定义一个哑节点*/
ListNode dumb=new ListNode(0);
/*哑节点的下一个节点指向头节点*/
dumb.next=head;
/*快指针*/
ListNode fast=head;
/*慢指针*/
ListNode slow=dumb;
/*当快指针不为null时继续*/
while (fast!=null){
/*如果fast到了尾节点或fast的数字与fast的next的数字不一样时进入*/
if(fast.next==null||fast.val!=fast.next.val){
/*如果相邻,则slow引用指向fast所指的对象*/
if(slow.next==fast){
slow=fast;
}else{
/*如果不相邻,则说明中间存在重复元素,将slow的下一个指向fast,这样就抹去了相同的元素其中的一个*/
slow.next=fast;
/*同时slow移向自己的下一个*/
slow=slow.next;
}
}
fast=fast.next;
}
return dumb.next;
}
