AcWing 28. 在O(1)时间删除链表节点
写在前面:AcWing是由北大一神级人物——“大雪菜” 创办的算法交流社区, 里面除了正常 oj 网站的功能之外, 还提供单人训练、双人匹配、云端操作系统等模式,除此之外不定期举行各种打卡活动,而且可以分享题解和心得,完全可以当成空间来玩。欢迎大家入坑。
点击前往:AcWing
题目描述
给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。
假设链表一定存在,并且该节点一定不是尾节点。
样例
输入:链表 1->4->6->8
删掉节点:第2个节点即6(头节点为第0个节点)
输出:新链表 1->4->8
解题思路
这个题给的是需要删除的节点, 并不是链表的头部, 这个困扰了我好久
以A->B->C->D为例, 我们需要删除B节点.需要得到的结果为A->C->D
过程
B节点将C节点的值复制过来, 变成了A->C->C->D
现在我们有了第一个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) {
node->val=node->next->val;
node->next=node->next->next;
}
};