剑指Offer系列
算法-删除链表重复节点
本题来源于剑指Offer的56题,我想到了一种好的方法,就记录在这里
题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
一个易于理解的思路:
1、新建一个辅助的头节点
2、设置当前节点的指针,这个指针可能是重复的也可能不是重复的
3、设置一个不重复节点,指向辅助头节点(认为他是不重复的)
4、比较当前指针和当前指针的下一个值是不是相等
5、如果相等,那么一直找到和当前节点不相同的第一个节点,设置为当前指针
6、如果不相等,那么说明这个节点不是重复节点,把他插入到不重复节点后面
7、循环完成后,将非重复节点后面置为null
Java代码实现:
public static ListNode deleteDuplication(ListNode pHead){
ListNode dummy=new ListNode(-1);
ListNode curr=pHead;
ListNode noDupHead=dummy;
while(curr!=null){
if(curr.next!=null&&curr.val==curr.next.val){
int val=curr.val;
while(curr!=null&&curr.val==val){
curr=curr.next;
}
}else{
noDupHead.next=curr;
noDupHead=noDupHead.next;
curr=curr.next;
}
}
noDupHead.next=null;
return dummy.next;
}