LeetCode237 Delete Node in a Linked List

文章目录
  1. 1. 描述
  2. 2. 样例
  3. 3. 思路
  4. 4. 代码

描述

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

样例

1
2
3
Supposed the linked list is 1 -> 2 -> 3 -> 4 
and you are given the third node with value 3,
the linked list should become 1 -> 2 -> 4 after calling your function.

思路

删除链表中某个指定的结点。

一个显然的做法就是拿后继node->next去覆盖当前这个node结点。

好了,代码就一行node = node->next,但submit后WA了…orz

其实这样写虽然是将指向node的指针指向了其后继结点,但是node前驱的后继指针却没有改变,因此实际上链表根本就没有被改变。

正确的写法应该是去更改内容,而不是更改指针。即*node = *(node->next)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 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)
}
};
分享到 评论