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;
}
}