刪除鏈表中重複的結點18

題目描述:

刪除有序鏈表中的重複節點,返回頭節點,例如1->1->2->2->3->4,返回3->4

public class Offer18 {

    public static void main(String[] args) {
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node31 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        node1.next = node2;
        node2.next = node3;
        node3.next = node31;
        node31.next=node4;
        deleteDuplication(node1);
        System.out.println(node1);
    }

    //循環寫法
    public static ListNode deleteDuplication(ListNode pHead) {
        //設置一個新頭結點,用於刪除原頭結點(如果需要的話)
        ListNode first = new ListNode(-1);
        //插入到原頭結點前,成爲頭結點
        first.next = pHead;
        //設置一指針,指向當前節點
        ListNode current = pHead;
        //前指針,指向前一節點
        ListNode pre = first;
        while (current != null && current.next != null) {
            if (current.val == current.next.val) {
                //記錄重複值
                int val1 = current.val;
                while (current != null && current.val == val1) {
                    //刪除當前節點
                    current = current.next;
                    //當前節點爲上一節點的下一節點,使current重新指向當前節點
                    pre.next = current;
                }
            } else {
                // 不重複則current和pre向後移動
                pre = current;
                //這裏是移動不是刪除,因爲之前的current已經是pre節點了
                current = current.next;
            }
        }
        return first.next;
    }


}

class ListNode {
    //屬性定義成公開的方便調用和使用
    public int val;
    //公有屬性
    public ListNode next;

    ListNode(int val) {
        this.val = val;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章