题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null || pHead.next == null) return pHead;
//创建一个辅助结点--哑结点
ListNode node = new ListNode(0);
node.next = pHead;//连接辅助结点和pHead结点
ListNode pre = node;
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 node.next;//node是辅助结点,后一个才是开始结点
}
}