原題地址: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的效果。

代碼:
/**
* 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é)果:
