LeetCode初級算法之鏈表:237 刪除鏈表中的節點

刪除鏈表中的節點

題目地址:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/java

請編寫一個函數,使其能夠刪除某個鏈表中給定的(非末尾)節點。傳入函數的惟一參數爲 要被刪除的節點 。node

現有一個鏈表 -- head = [4,5,1,9],它能夠表示爲:數據結構

示例 1:函數

輸入:head = [4,5,1,9], node = 5
輸出:[4,1,9]
解釋:給定你鏈表中值爲 5 的第二個節點,那麼在調用了你的函數以後,該鏈表應變爲 4 -> 1 -> 9.學習

示例 2:指針

輸入:head = [4,5,1,9], node = 1
輸出:[4,5,9]
解釋:給定你鏈表中值爲 1 的第三個節點,那麼在調用了你的函數以後,該鏈表應變爲 4 -> 5 -> 9.code

提示:對象

  • 鏈表至少包含兩個節點。
  • 鏈表中全部節點的值都是惟一的。
  • 給定的節點爲非末尾節點而且必定是鏈表中的一個有效節點。
  • 不要從你的函數中返回任何結果。

題解

做爲合集中鏈表下的第一題,確實是較簡單的只是一個單元操做,但若是不知道鏈表這種數據結構也仍是是完成不了的。leetcode

鏈表是什麼?get

鏈表是物理存儲單元上非連續的、非順序的存儲結構,數據元素的邏輯順序是經過鏈表的指針地址實現,有一系列結點(地址)組成,結點可動態的生成,也就是包含值與模擬指針(引用)。大概以下:

每一個節點對象除了內容值還有一個引用一共兩個屬性,這樣以來各個節點對象之間就好像鏈接着同樣

class ListNode{
    //節點值
    int val;
    //節點指向的下個節點
    ListNode next;
    //構造器
    ListNode(int x) { 
        val = x; 
    }
}

如今它傳一條鏈表的一個節點,刪除這個節點。由於一個節點的信息只有本身的值以及下個節點。因此傳入一個節點是看不到整個鏈表的。也就是說咱們只能拿到部分鏈就是傳入的節點以後的5--->1--->9。值爲4的節點是指向5這個節點的,刪除5節點就是讓4節點直接指向1節點就能夠了,但咱們拿不到4節點因此不能改變它的next屬性的值。那麼咱們只能改它指向的節點把它的值由5改爲1再指向9

這樣就不用改變4節點的指向,只是把它指向的這個對象值與next都改掉,那麼4仍是指向0x001只不過是1了,而這個指向的又是0x004就是9,鏈表也就變成了4--->1--->9完成刪除5的操做

public void deleteNode(ListNode node) {
    //「被刪節點」的值改成下個節點的值
    node.val = node.next.val;
    //指向下下個
    node.next = node.next.next;
}

總結

開篇第一題主要是考察學習鏈表構成,自己是簡單的但先要了解這樣一個數據結構。

相關文章
相關標籤/搜索