剑指offer刷题笔记
删除链表中重复的结点:较难
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
public class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead==null||pHead.next==null)return pHead; ListNode p0=new ListNode(-2147483648);//构造前站节点来防止第一个节点被删除的惨剧 ListNode p1=p0; ListNode p2=pHead; int temp=pHead.val; int dup=0;//dup==1表示有重复 while (p2.next!=null){//循环外还有处理? if(p2.next.val==temp){ dup=1; p2=p2.next;// } else{ if (dup==0){ p1.next=p2; p1=p1.next; } dup=0; temp=p2.next.val; p2=p2.next; } } if (dup==0)p1.next=p2; if (dup==1)p1.next=null;//p1每次接收都是后面一串 p0=p0.next;//过河拆桥,去掉头部哨兵 return p0; } }
版权声明:本文为qyf2199原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。