当前位置 博文首页 > HizT_1999的博客:LeetCode——0237.删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
现有一个链表 -- 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