题目描述
给定单向链表的一个节点指针,定义一个函数在$O(1)$时间删除该结点。
假设链表一定存在,并且该节点一定不是尾节点。
数据范围
链表长度 $[1,500]$。
样例
输入:链表 1->4->6->8
删掉节点:第2个节点即6(头节点为第0个节点)
输出:新链表 1->4->8
这是我写过代码最短的题……
思路:
由于可恶的出题人没有给我们头结点,所以就找不到要删除的点的前一个结点,所以只能换种思路,把要删除的结点的下一个结点的值搬到要删除的节点上,再把本该被删除的结点的下一个结点给删除。
没看懂的话就看下面这副图:
代码:
/**
* 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) {
//把下一个结点的值copy到要删除的结点
node -> val = node -> next -> val;
//把下一个结点给删除
node -> next = node -> next -> next;
}
};
这道超氵的题的题解到这就结束了。感谢观看,Thanks♪(・ω・)ノ!!!
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$
我明白了,但我不理解咋就给删掉了啊
有这回事吗?那可能是我朋友登我号搞的
不是这个意思(哭),我没看明白咋把下一个节点删掉的(哭)
意思就是本来 A->B->C 的,然后把 A->B 改成 A->C,这样B就被删除掉了,因为无法再次通过遍历链表来访问B
挺好的
大佬
%%%%%
按这样来说2节点的值就永远被替换成3了呗
对