Reputation: 1400
I am learning LinkedList from an easy leetcode problem Delete Node in a Linked List - LeetCode
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Given linked list -- head = [4,5,1,9], which looks like following:
Example 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.
Example 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.
Note:
- The linked list will have at least two elements.
- All of the nodes' values will be unique.
- The given node will not be the tail and it will always be a valid node of the linked list.
- Do not return anything from your function.
And the official solution:
Replace the value of the node you want to delete with the value in the node after it, and then delete the node after it.
# 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
I thought it cumbersome, so changed it to:
class Solution:
def deleteNode(self, node):
node= node.next
Assign the next node to the current node in a straightforward way
Unfortunately, it reports wrong answer.
I cannot figure out why it's not working.
The logic is free of bugs : the current node was shadowed by its next node,
Upvotes: 1
Views: 244
Reputation: 3744
Here is what we want to do, delete node
:
pre -> node -> post
=> pre -> post
So what you should do is change pre.next
from node
to node.next
. like:
pre.next = node.next
If you do node = node.next
, it only change the node
reference.
It has no any effect on original ListNode.
But we can not get pre
in this scenario, so we have to change node
value to become to post
, and remove post
.
Hope that helps you, and comment if you have further questions. : )
Upvotes: 2