刪除鏈表中重複的結點(java)

在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。

例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5
1.鏈表爲空,走人ヾ(•ω•`)o。
2.因爲是單向鏈表,故刪除節點時,掛接的時候要定義一個前驅結點。
3.判斷遍歷到的結點是否需要刪除,如果不需要刪除,直接往下遍歷就好了
4.如果需要刪除,因爲它是刪除重複的結點,那這是一個循環,刪除的時候注意將要刪除的結點置空,以防止內存泄漏!!!!

/**
class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public static ListNode deleteDuplication(ListNode pHead)
    {
        if(pHead == null || pHead.next == null)
            return pHead;
        ListNode pre = null;
        ListNode p = pHead;
        while(p != null){
            ListNode next = p.next;
            boolean isDel = false;
            if(next != null && p.val == next.val){
                isDel = true;
            }
            if(!isDel){
                pre = p;
                p = next;
            }else{
                int val = p.val;
                ListNode toDel = p;
                while(toDel != null && toDel.val == val){
                    next = toDel.next;
                    toDel.next = null;   //不要以爲該步沒有意義,目的是刪除p的內存,防止內存泄漏
                    toDel = next;
                }
                if(pre == null){
                    pHead = next;
                }else{
                    pre.next = next;
                }
                p = next;
            }
        }
        return pHead;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章