首先要搞清楚题目的意思,题意是给定某个未知链表中的一个节点node,删除这个节点。
由于我们不知道这个链表,那么也没法知道node的前一个节点,也就没法按照常规方法删除node。
但是我们知道node及其之后的节点,而删除之后的链表相当于node之后的每个节点的值都向前移动了一个单位。
为什么要移动所有节点的值呢,我们仅仅需要移动node后面第一个元素值就可以了。即令node -> val = node -> next -> val, 然后删除node->next即可。
/**
* 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;
}
};
/**
* 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;
}
};