Delete Node in a Linked List(easy)
问题描述:
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:
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.
解法:
当时看到这道题的描述就很疑惑,因为就是一个简单的从单链表中删除元素的题有什么难的,而且为什么要强调不能删除最后一个元素呢。而看到给的函数头后就疑惑了,因为只给了要删除的值,按理说不是应该给两个值吗,一个单链表,一个删除值。。。
想了好久,看了一个解析后明白了,这题就不是传统给单链表删值的题,他是给了我们一个节点的位置,然后让我们把这个节点删除掉,至于不给我们单链表的操作可能就是不想我们用传统的遍历做吧。。但是这题的描述也太不清楚了,怪不得leetcode上踩那么多。
解法就是给了我们节点位置了,我们可以把当前节点位置的值变成后续节点位置的值,然后把当前节点的next变成next的next,相当于我们其实是将node.next移除了。。
看懂题意后这道题还蛮有意思的,可以扩展一下思维。
# 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
return