我正在从一个简单的leetcode问题Delete Node in a Linked List - LeetCode中学习LinkedList
编写一个函数以删除单链接列表中的节点(尾部除外),只允许访问该节点。
给出链表-head = [4,5,1,9],如下所示:
示例1:
Input: head = [4,5,1,9], node = 5 Output: [4,1,9] Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function.
示例2:
Input: head = [4,5,1,9], node = 1 Output: [4,5,9] Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function.
注意:
- 链接列表将至少包含两个元素。
- 所有节点的值都是唯一的。
- 给定的节点将不会是尾部,并且将始终是链表的有效节点。
- 请勿从函数中返回任何内容。
以及官方解决方案:
将要删除的节点的值替换为它后面的节点中的值,然后删除它后面的节点。
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = node.next.val
node.next = node.next.next
我认为它很麻烦,因此将其更改为
class Solution:
def deleteNode(self, node):
node= node.next
直接将下一个节点分配给当前节点
不幸的是,它报告了错误的答案。
我不知道为什么它不起作用。
逻辑上没有错误:当前节点被其下一个节点遮盖
答案 0 :(得分:2)
这是我们想要做的,删除node
:
pre -> node -> post
=> pre -> post
因此,您应该将pre.next
从node
更改为node.next
。喜欢:
pre.next = node.next
如果您执行node = node.next
,则只会更改node
引用。
它对原始ListNode没有任何影响。
但是在这种情况下我们无法获得pre
,因此我们必须将node
的值更改为post
,然后删除post
。
希望对您有所帮助,如果还有其他问题,请发表评论。 :)