LeetCode-237. 刪除鏈表中的節(jié)點(diǎn)

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

請編寫一個函數(shù),使其可以刪除某個鏈表中給定的(非末尾)節(jié)點(diǎn),你將只被給定要求被刪除的節(jié)點(diǎn)。

現(xiàn)有一個鏈表 -- head = [4,5,1,9],它可以表示為:


題目原圖

示例1:

輸入: head = [4,5,1,9], node = 5
輸出: [4,1,9]
解釋: 給定你鏈表中值為 5 的第二個節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后,該鏈表應(yīng)變?yōu)?4 -> 1 -> 9.

示例2:

輸入: head = [4,5,1,9], node = 1
輸出: [4,5,9]
解釋: 給定你鏈表中值為 1 的第三個節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后,該鏈表應(yīng)變?yōu)?4 -> 5 -> 9.

說明:

  • 鏈表至少包含兩個節(jié)點(diǎn)。
  • 鏈表中所有節(jié)點(diǎn)的值都是唯一的。
  • 給定的節(jié)點(diǎn)為非末尾節(jié)點(diǎn)并且一定是鏈表中的一個有效節(jié)點(diǎn)。
  • 不要從你的函數(shù)中返回任何結(jié)果。

解題方案:
其實(shí)這道題比較簡單,對于我們來說不用去管head節(jié)點(diǎn),且根據(jù)題目說明可知,不需要去判斷該節(jié)點(diǎn)的合法性,只需要刪除給定節(jié)點(diǎn)就行,這里可以用一種很巧妙的方法:把下個節(jié)點(diǎn)的值賦給當(dāng)前節(jié)點(diǎn),替代后的本節(jié)點(diǎn)指向下下個節(jié)點(diǎn),無需額外刪除下一個節(jié)點(diǎn)的內(nèi)容。
以題中所給的幾個數(shù)字進(jìn)行模擬,若要刪除節(jié)點(diǎn)5,則先把下個節(jié)點(diǎn)的值賦給本節(jié)點(diǎn),變?yōu)閇4,1,1,9];然后將本節(jié)點(diǎn)的下個節(jié)點(diǎn)指向下下個節(jié)點(diǎn),這樣就變成了[4,1,9],從而達(dá)到“刪除”節(jié)點(diǎn)5的效果。


image.png

代碼:

/**
  * Definition for singly-linked list.
  * public class ListNode {
  *     int val;
  *     ListNode next;
  *     ListNode(int x) { val = x; }
  * }
  */
 class Solution {
     public void deleteNode(ListNode node) {
         node.val = node.next.val;  // 把下個節(jié)點(diǎn)的值賦給當(dāng)前節(jié)點(diǎn)
         node.next = node.next.next;  // 替代后的本節(jié)點(diǎn)指向下下個節(jié)點(diǎn),無需額外刪除下一個節(jié)點(diǎn)的內(nèi)容
     }
 }

提交結(jié)果:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容