Problem Definition:
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.
思路:
本题的难点在于,要在单链表中删除某个节点,且只有对这个要删除的节点的访问。由于无法访问这样要删除节点前面的节点,常规的节点删除方法不适用。
怎么利用对当前要删除的节点以及它的后续节点来完成删除操作嘞?
把后续节点的值复制到要删除的节点,再把这个后续节点删除。
代码:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # @param {ListNode} node # @return {void} Do not return anything, modify node in-place instead. def deleteNode(self, node): if node.next==None: return node.val=node.next.val node.next=node.next.next
注意边界情况的处理:如果要删除的是最后一个节点,直接跳过。