题目:
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
现有一个链表 -- 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)
这道题不讲 LeetCode 德。
传统删除链表
传统链表删除一般怎么操作呢?
- 修改要删除德节点的前一个节点的指针
- 将上一个节点的指针指向被删除节点的下一个指针
本题思路
但是这道题给定的参数只有删除的节点,所以原则上是无法通过遍历找到需要删除的前一个节点的。因此,这道题的解法有点取了。
- 将要删除的节点的后一个节点的值复制到该节点
- 将要删除的节点的指针指向复制节点的下一个节点
简而言之,就是复制一个删除的节点的后一个节点,然后把这个复制的节点删掉,就完成了这道题的要求。
var deleteNode = function(node){
node.val = node.next.val;
node.next = node.next.next;
}