# 【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:

> 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],它看起來就像這樣:
> 注意:
> * 該串列鏈結至少擁有兩個元素。
> * 所有的節點都不重複。
> * 給予的節點不會是尾巴,且它總是串列鏈結中的合法節點。
> * 不要回傳任何東西。
## 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`刪除。
* 
* 但因為這題只給予目標節點的存取權,拿不到所謂的`x - 1`,因為我們換一個做法。
* 我們先將`x`的值設為`x + 1`的值,然後直接將`x`的`next`指向`x + 2`,最後將`x + 1`刪除。
* 
* 概念是完全一樣的,只是把整體往後移了一步。
### 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++`