劍指offer13:在O(1)時間刪除鏈表結點

問題:
給定鏈表的頭指針和一個節點指針,在O(1)平均時間刪除該節點。

public class DeleteListNode {

        public static void deleteNode(ListNode head,ListNode target){
            //如果參數爲空
            if(head==null||target==null){
                return;
            }

            if(head.next==null){
                //如果只有一個頭結點
                target = null;
                head = null;
            }else if(target.next==null){
                //如果target爲最後一個結點,則需遍歷
                ListNode cur = head;
                while(cur.next!=target){
                    cur = cur.next;
                }
                cur.next = null;
                target = null;
                System.out.println("到這了1");
            }else{
            //如果target不是最後一個結點,則可在O(1)時間內刪除結點
            //思路:先將要刪的結點的後置結點複製到該節點,然後再令其後置結點成爲next的next
                ListNode pNext = target.next;
                target.val = pNext.val;
                target.next = pNext.next;
            }


        }

        public static void main(String[] args){
            ListNode a = new ListNode(1);
            ListNode b = new ListNode(2);
            ListNode c = new ListNode(3);
            ListNode d = new ListNode(4);
            a.next = b;
            b.next = c;
            c.next = d;

            deleteNode(a, c);
            while (a!=null) {
                System.out.println(a.val);
                a=a.next;
            }

        }
}
發佈了80 篇原創文章 · 獲贊 141 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章