您的位置:首页 > 其它

LeetCode.82(83) Remove Duplicates from Sorted List

2017-08-27 11:22 302 查看
83.Remove Duplicates from Sorted List

题目:

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,

Given 
1->1->2
, return 
1->2
.
Given 
1->1->2->3->3
, return 
1->2->3
.

分析:

/**
* 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)return null;
ListNode cur=head;
while(cur.next!=null){
//确保当前节点与下一个结点不重复,否则移除重复节点
if(cur.val==cur.next.val){
cur.next=cur.next.next;
}else{
//不重复,继续往下寻找
cur=cur.next;
}
}
return head;
}
}
82.Remove Duplicates from Sorted List(II)

题目:

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
.

分析:

/**
* 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)return head;
ListNode cur=new ListNode(0);
ListNode temp=cur;
cur.next=head;
ListNode pre=head;

while(pre!=null){
//轮询到重复元素
while(pre.next!=null&&pre.val==pre.next.val){
pre=pre.next;
}//为重复的最后一个
//判断是否temp的下一个是否是当前pre
if(temp.next==pre){
temp=temp.next;//查找到当前pre
}else{
//说明pre的下一个为不重复元素可以拼接
temp.next=pre.next;
}
pre=pre.next;
}
return cur.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: