56、删除链表中重复的节点
一、题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
二、解题思路
1、利用hashMap
- 略
2、双指针操作
- cur:当前指针
- p:初始cur+1,p往后走,直到遇到不等的节点
- 函数移除[cur,p)之间的节点
- cur=p
public ListNode deleteDuplication(ListNode pHead){
if(pHead==null){
return null;
}
ListNode cur=pHead;
ListNode p=pHead.next;
while(cur!=null&&p!=null){
if(p.val==cur.val){
while(p!=null&&p.val==cur.val){
p=p.next;
}
pHead=remove(pHead, cur, p);
}
cur=p;
if(p!=null){
p=p.next;
}
}
return pHead;
}
public ListNode remove(ListNode pHead,ListNode s,ListNode e){
ListNode p=pHead;
if(s==e){
return pHead;
}
if(e==null){
if(pHead==s){
return null;
}
}
if(pHead==s){
return e;
}
while(p!=null&&p.next!=s){
p=p.next;
}
p.next=e;
return pHead;
}