当前位置 博文首页 > HizT_1999的博客:LeetCode——0237.删除链表中的节点

    HizT_1999的博客:LeetCode——0237.删除链表中的节点

    作者:[db:作者] 时间:2021-09-03 12:14

    237.删除链表中的节点

    题目

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
    
     
    
    现有一个链表 -- head = [4,5,1,9],它可以表示为:
    
    
    
     
    
    示例 1:
    
    输入:head = [4,5,1,9], node = 5
    输出:[4,1,9]
    解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
    示例 2:
    
    输入:head = [4,5,1,9], node = 1
    输出:[4,5,9]
    解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    

    题解思路

    1>源代码

    # 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
    
    

    2>算法介绍

    这道题我原以为是使用双指针进行遍历链表,每当碰到需要删除的节点就执行删除操作,但定睛一看我傻眼了。函数的形参只有一个node,表示我现在就要删除这个节点,也就是如下这种情况:

    1->2->3->4->5->NULL

    此时node指向3.

    按理来说,删除一个节点是必须获得他的前一个节点指针的,但本题中并没有给我们这个条件。于是我们只能将这个节点的后一个节点值赋给当前节点,并删除后一个节点。于是我们的代码就完成了。


    这道题本身难度不大,但是题目出的非常有意思,惯性思维很容易就会被装进去,值得我们学习。

    cs