题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
创建一个头指针,用于返回结果,然后在创建两个链表,一个是指向当前结点的值,一个是删除链表重复元素的值,指向确定不重复的结点。
注意特殊情况,比如链表中结点全重复,为空等
代码
public ListNode deleteDuplication(ListNode pHead){
if (pHead==null || pHead.next==null){
return pHead;
}
ListNode gard = new ListNode(-1);
gard.next = pHead;
ListNode pre = gard;
ListNode curr = pHead;
while(curr!=null && curr.next!=null){
if(curr.val == curr.next.val){
int value = curr.val;
while(curr.next!=null && curr.next.val == value){
curr = curr.next;
}
curr = curr.next;
pre.next = curr;
}
else{
pre = pre.next;
curr = curr.next;
}
}
return gard.next;
}