237.删除链表中的节点
题目描述
原题链接:删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
/**
* 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) {
}
};
题解
/**
* 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* DEL = node->next;//要删除的节点
node->val = node->next->val;//赋值
node->next = node->next->next;//赋指针
delete DEL;
}
};
该题要注意理解题目意思,值得注意的是题目中并没有给出头结点,且要删除的节点就是node。
题解中使用的方法是“狸猫换太子”,即实际删除的是node->next
,在删除之前把node->next
节点的值和指针赋给note
节点,让这个两个节点完全一样,之后便可以删除node->next
节点。
之所以这么做的原因是我们无法知道node
节点的前一个节点,如果直接将node
节点删除,该链表就断了。