以简单的方式从单个LinkedList删除节点

时间:2019-04-09 10:19:16

标签: python linked-list

我正在从一个简单的leetcode问题Delete Node in a Linked List - LeetCode中学习LinkedList

  

编写一个函数以删除单链接列表中的节点(尾部除外),只允许访问该节点。

     

给出链表-head = [4,5,1,9],如下所示:

     

enter image description here

     

示例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

直接将下一个节点分配给当前节点

不幸的是,它报告了错误的答案。

我不知道为什么它不起作用。

逻辑上没有错误:当前节点被其下一个节点遮盖

1 个答案:

答案 0 :(得分:2)

这是我们想要做的,删除node

pre -> node -> post => pre -> post

因此,您应该将pre.nextnode更改为node.next。喜欢:

pre.next = node.next

如果您执行node = node.next,则只会更改node引用。

它对原始ListNode没有任何影响。

但是在这种情况下我们无法获得pre,因此我们必须将node的值更改为post,然后删除post

希望对您有所帮助,如果还有其他问题,请发表评论。 :)