LeetCode 237. 删除链表中的节点

题目链接

https://leetcode-cn.com/problems/delete-node-in-a-linked-list/

题解

这题是真**的妙啊!

要求删除链表里的一个结点,但是只给了要删除的结点。

一般来说都是要找到被删除结点的前一个结点才能够进行删除的,但是这题没有。

只能另辟蹊径了。

我们无法删除这个结点,但是我们可不可以删除这个结点的下一个结点,然后用这个结点代替它呢?

试试。

现有一个链表 —— head = [4, 5, 1, 9],删除值为 5 的结点。
输入:head = [4, 5, 1, 9], node = 5

按照刚才的思路,把值为 5 的第二个结点变成第三个结点,也就是把它的值和 next 指针都改为第三个结点的值和 next 指针。

这样一来这个链表就变成 4, 1, 1, 9 了,然后删除第三个结点即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 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) {
int val = node->next->val;
ListNode* next = node->next->next;
delete node->next;
node->val = val;
node->next = next;

// 其实也可以不删除结点,直接跳过它
// 这样的话两行代码就搞定了
// but 不推荐这样做
/*
node->val = node->next->val;
node->next = node->next->next;
*/
}
};
# 链表

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×