1. 程式人生 > 其它 >Java leetcode-JZ18 刪除連結串列結點

Java leetcode-JZ18 刪除連結串列結點

技術標籤:java資料結構單鏈表leetcode

題目描述

給定單向連結串列的頭指標和一個要刪除的結點的值,定義一個函式刪除該結點,然後返回刪除結點後的連結串列的頭指標。

示例1
輸入: head = [4,5,1,9], val = 5
輸出: [4,1,9]
解釋: 給定你連結串列中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 1 -> 9.
示例2
輸入: head = [4,5,1,9], val = 1
輸出: [4,5,9]
解釋: 給定你連結串列中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 5 -> 9.

來源:力扣(LeetCode)
連結:刪除連結串列結點

實現程式

第一種方法

public ListNode deleteNode(ListNode head, int val) {
        //方便對頭節點的操作,建立啞結點dummyhead
        //cur = dummyhed, cur指向當前節點

        ListNode dummyhed = new ListNode(1); //啞結點的引用為空,值任意
        dummyhed.next = head; //把啞結點和表頭連起來
        ListNode cur = dummyhed;
        while
(cur != null && cur.next != null){ //找到要刪除的結點時,退出迴圈 if(cur.next.val == val){ cur.next = cur.next.next; break; } cur= cur.next; //cur = cur->next,進行連結串列遍歷 } head = dummyhed.next; //讓head指向dummyhed.next所指向的結點
return head; }

第二種方法

 public ListNode deleteNode(ListNode head, int val) {
        //首先判斷連結串列頭是否為空
        if(head == null){
            return null;
        }
        //當表頭的值為val時,讓head指向head.next
        if(head.val == val){
            return head.next;
        }
        ListNode cur = head;
        ListNode prev = null;  //起初指向空結點,prev的目的為了指向刪除結點的前一個結點
        while(cur.val != val){
            prev = cur;
            cur = cur.next;
        }
        //cur指向為刪除的結點
        //讓prev指向的結點的next指向cur的下一個結點,這樣就間接刪除了關鍵字為val的結點
        prev.next = prev.next.next; 
        return head;
    }