leetcode 237:删除链表中的节点
-
题目
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 – head = [4,5,1,9],它可以表示为:
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.说明:
链表至少包含两个节点
链表中所有节点的值都是唯一的
给定的节点为非末尾节点并且一定是链表中的一个有效节点
不要从你的函数中返回任何结果
-
解题思路
正常来说,如果我要删除节点3,直接让前一节点2的next指向后一节点4,就可以跳过节点3,达到删除的效果。
但是这一题并没有给我们头结点,我们无法通过遍历的方式来找到这前一个节点。这题只给定我们删除的节点,没法找到前一个节点,正常的删除方式行不通。
我们回头看下条件。链表至少包含两个节点
和给定的节点为非末尾节点并且一定是链表中的一个有效节点
。我们可以通过下一个节点的值赋值给需要删除的节点,再把next指向下下个节点,达到删除的效果。
举例:假如我要删除节点4
步骤1:
步骤2:
步骤3:
步骤4:
步骤5:
步骤6:
因为
链表至少包含两个节点
、链表中所有节点的值都是唯一的
、给定的节点为非末尾节点并且一定是链表中的一个有效节点
。
所以我们这种思路是可行的。 -
代码实现
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func deleteNode(node *ListNode) { node.Val=node.Next.Val node.Next=node.Next.Next }
- List item