解题思路是在遍历单链表的时候,检查当前节点与下一点是否为相同值,如果相同,继续查找祥同值的最大长度,然后指针改变指向
由于有可能第一个节点就是重复的节点从而被算法删除,所以在定义的时候定义一个新的头节点,在返回的时候返回这个节点的next。
using System.Collections.Generic;
/*
public class ListNode
{
public int val;
public ListNode next;
public ListNode (int x)
{
val = x;
}
}*/
/*在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,
重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5*/
class Solution
{
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead==null)
{
return pHead;
}
ListNode vHead=new ListNode(0);//由于pHead有可能会被删除,所以这里定义一个不会被删除的节点vHead
vHead.next=pHead;
ListNode pre = vHead;
ListNode cur=pHead;
while(cur!=null)
{
if(cur.next!=null && cur.val==cur.next.val)
{
while(cur.next!=null && cur.val==cur.next.val)
{
cur=cur.next;
}
cur=cur.next;
pre.next=cur;
}
else
{
pre=cur;
cur=cur.next;
}
}
return vHead.next;
}
}