1. 程式人生 > >劍指offer刷題筆記

劍指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;
    }
}

&n