您的位置:首页 > 其它

101.Remove Duplicates from Sorted List II

2016-02-27 21:49 337 查看
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
.

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5处理后为 1->2->5.leetcode101

分析:

首先判断链表是否为空。

1.定义一个新的节点dump,使其指向pHead,最后返回dump.next即可

2.使得dump到tail结点之间为目前已经确定的结果

3.q为在剩下的链表的头结点,next为在剩下的链表中找到的第一个符合条件的节点。

循环2,3直到q为空。

/**
* 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
* 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5.
* 首先判断链表是否为空。
* 1.定义一个新的节点dump,使其指向pHead,最后返回dump.next即可
* 2.使得dump到tail结点之间为目前已经确定的结果
* 3.q为在剩下的链表的头结点,next为在剩下的链表中找到的第一个符合条件的节点
* 循环2,3知道q为空。
*/
public ListNode deleteDuplicates(ListNode pHead){
if(pHead == null || pHead.next==null){
return pHead;
}
ListNode dump = new ListNode(0);
dump.next = pHead;
ListNode tail = dump;
ListNode q = pHead;
ListNode next = pHead;

/*遍历链表*/
while(q!=null){
next = q;
next = next.next;
boolean needDelete = false;//表示某个节点是否需要被删除
while(next != null && next.val == q.val){
needDelete= true;//进到这个循环说明该节点有重复的
next = next.next;
}
if(!needDelete){//如果这个节点不需要删除,则把它加到之前选中链表的末尾。
tail.next = q;
tail = tail.next;
}
q = next;
}

tail.next = null;

return dump.next;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: