AcWing 28. 在O(1)时间删除链表结点
原题链接
简单
作者:
Echo.O
,
2024-02-16 11:29:59
,
所有人可见
,
阅读 43
思路:将当前结点的数值域值和指针域值替换成下一结点的数值域值和指针域值,等效于直接忽略掉当前结点,利用下一结点作替身
删除节点的方法:
1.跳过法:
$\quad pre->next=p->next;\quad 使用前提是要知道需删除结点的前一结点$
2.伪装法:
$\it{*p=*(p->next)}$等价于$\quad p->val=p->next->val;\,p->next=p->next->next;\quad 使用前提是要删除的结点不能是尾结点$
【注】p是地址,*p是该地址存的所有值
/**
* 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)=*(node->next);该句代码等效于下面两句
node->val=node->next->val;
node->next=node->next->next;
}
};