删除链表中的节点java
请编写一个函数,使其能够删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。node
示例 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.
说明:
链表至少包含两个节点。
链表中全部节点的值都是惟一的。
给定的节点为非末尾节点而且必定是链表中的一个有效节点。
不要从你的函数中返回任何结果。
这道题目实在是有些坑,看完描述心中呵呵,一个 for 循环找到待删除的节点,再将待删除的节点的上一节点的 next 指向待删除节点的下一节点,这不就搞定了吗,简单!一看代码,怎么入参只有一个啊,懵圏半天。函数
这就是这道题目须要注意的一个地方,实际上入参只有一个待删除节点的引用,也就是说,咱们不知道待删除节点的上一个节点,也就没法将它的 next 指向待删除节点的下一节点。code
问题不大,换个思路就是。leetcode
既然咱们拿到的是待删除节点的引用,也就是说,待删除节点及其后面关联的节点,咱们都有。此外题目中还指明待删除节点是一个非末尾结点、链表至少包含两个节点。get
假设咱们拿到的待删除节点是 4->5->6,咱们要删除 4,那么只要用待删除节点的后一个节点的值覆盖待删除节点(此时变成5->5->6),再将待删除节点的 next 指向待删除节点的后一个节点的后一个节点便可(即 4 的 next 指向 6,此时变成 5->6, 5)。io
class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; } }