您的位置:首页 > 其它

leetcode之Remove Duplicates from Sorted List II

2015-04-21 14:44 465 查看
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
.

这道题比上一道题难度大很多,首先,好多情况都要考虑

因为是要删除链表中的重复元素,所以要分好多种情况,如果整个链表的元素相同?如果头结点和第二个元素相同?如果最后两个元素相同?

这道题自己没想起来,看剑指offer上面试题57才有了大致的思路,定义一个指向head的结点可以省好多事

另外,定义了一个布尔变量,如果值相同,就代表应该删除,这里很巧妙的如果布尔值为true那么我继续指向下一个元素,否则两个指针都向前推进。

下面附上代码:

public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null) return head;
ListNode newHead = new ListNode(-1);
newHead.next = head;
ListNode p1 = newHead;
ListNode p2 = head;
while(p2!=null){
boolean dup = false;
while(p2.next!=null && p2.val == p2.next.val){
dup = true;
p2 = p2.next;
}
if(dup){
p2 = p2.next;
continue;
}
p1.next = p2;
p1 = p1.next;
p2 = p2.next;
}
p1.next = p2;
return newHead.next;
}


  稍后再看看剑指offer上的源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: