给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 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; }