# 【LeetCode】 237. Delete Node in a Linked List ## Description > Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. > Given linked list -- head = [4,5,1,9], which looks like following: ![](https://i.imgur.com/gnknEa1.png) > Note: > * The linked list will have at least two elements. > * All of the nodes' values will be unique. > * The given node will not be the tail and it will always be a valid node of the linked list. > * Do not return anything from your function. > 寫一個函式能刪除單向串列鏈結中的一個節點(不會是尾巴),只會給予該節點的存取權。 > 給予串列鏈結的頭 = [4,5,1,9],它看起來就像這樣:![](https://i.imgur.com/gnknEa1.png) > 注意: > * 該串列鏈結至少擁有兩個元素。 > * 所有的節點都不重複。 > * 給予的節點不會是尾巴,且它總是串列鏈結中的合法節點。 > * 不要回傳任何東西。 ## Example: ``` Example 1: Input: head = [4,5,1,9], node = 5 Output: [4,1,9] Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function. Example 2: Input: head = [4,5,1,9], node = 1 Output: [4,5,9] Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function. ``` ## Solution * 基本的Linked-List練習題。 * 刪除節點`x`時,通常我們會將`x - 1`的`next`指向`x + 1`,並將節點`x`刪除。 * ![](https://i.imgur.com/qCisLfk.png) * 但因為這題只給予目標節點的存取權,拿不到所謂的`x - 1`,因為我們換一個做法。 * 我們先將`x`的值設為`x + 1`的值,然後直接將`x`的`next`指向`x + 2`,最後將`x + 1`刪除。 * ![](https://i.imgur.com/Ul54PmD.png) * 概念是完全一樣的,只是把整體往後移了一步。 ### Code ```C++=1 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void deleteNode(ListNode* node) { node->val = node->next->val; auto temp = node->next; node->next = node->next->next; delete(temp); } }; ``` ###### tags: `LeetCode` `C++`