leetcode237题解

leetcode 237. Delete Node in a Linked List

题目

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

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.

题目要求,给你一个链表和要删除的节点,把这个节点删除。但需要注意的是这里只有对要删除节点的访问权限。

解题思路

我们先回顾一下链表的基本删除操作,我们需要知道要删除节点前一个节点,再将上一个节点的next指针指向删除节点后的指针。但这道题是单向链表,没法知道前一个节点,所以需要一些奇技淫巧。
因为题目给的是删除节点,那说明这个节点可以舍弃了,我们把下一个节点的值拷贝给当前要删除的节点,再删除下一个节点。
大致过程如下(删除3):
1->2->3->4->5
1->2->4->4->5
1->2->4->5

AC代码如下

//题目已经说明不删除尾节点
class Solution {
public:
void deleteNode(ListNode* node) {
 node->val=node->next->val;
 node->next=node->next->next;   
}
};

总结

在leetcode上这道题争议很多,有的人说stupid,有的人说wrong。看了几个人说的后,我自己觉得这道题应该没有问题。题目要求的是delete node,虽然我们这道题是交换值后,变相删除节点,但根据题目要求,也只能这样做才能完成。纠结可能会造成内存泄露也没啥意思,这道题是15年更新的,leetcode一直没有回应可能也代表了官方的态度吧。

希望与各位探讨~

你可能感兴趣的:(leetcode题解)