/**
* 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||head.next==null)return head;
ListNode head_node=new ListNode(0);//设置头节点
head_node.next=head;
ListNode pre=head_node;//pre是一定保留的
ListNode cur=head;//中
ListNode behind=cur.next;//后面的
while(behind!=null)
{
if(cur.val!=behind.val)
{
pre=cur;
cur=behind;
behind=behind.next;
}
else
{
//不等于空要放在前面
while(behind!=null&&cur.val==behind.val)//当前和后面一样 往后找 直道不一样的出现
{
behind=behind.next;
}
cur=behind;
pre.next=cur;
if(behind!=null)behind=cur.next;
}
}
return head_node.next;
}
}
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
.
解法:先设置一个头节点,以便处理都一致,设置三个点pre,cur,behind,pre是一定要保留的,其他的判断cur和behind是否一致,一致就保留,不一致behind去找后面的,直到null为止,cur等于等于新的不一样的,pre->cur->behind。