# [237. Delete Node in a Linked List](https://leetcode.com/problems/delete-node-in-a-linked-list/description/)
# 思路
首先要搞清楚题目的意思，题意是给定某个未知链表中的一个节点node，删除这个节点。 
## 思路一
由于我们不知道这个链表，那么也没法知道node的前一个节点，也就没法按照常规方法删除node。   
但是我们知道node及其之后的节点，而删除之后的链表相当于node之后的每个节点的值都向前移动了一个单位。
## 思路二(思路一改进)
为什么要移动所有节点的值呢，我们仅仅需要移动node后面第一个元素值就可以了。即令node -> val = node -> next -> val, 然后删除node->next即可。
# C++
## 思路一
``` C++
/**
 * 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) {
        ListNode *pre;
        while(node -> next){
            node -> val = node -> next -> val;
            pre = node;
            node = node -> next;
        }
        pre -> next = NULL;
        delete node;
    }
};
```
## 思路二
```C++
/**
 * 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) {
        ListNode *tmp = node -> next;
        node -> val = tmp -> val;
        node -> next = tmp -> next;
        tmp -> next = NULL;
        delete tmp;
    }
};
```
