学算法刷LeetCode:237-删除链表中的节点

233 阅读1分钟

题目:

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。

现有一个链表 -- 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-cn.com/problems/de…

这道题不讲 LeetCode 德。

传统删除链表

传统链表删除一般怎么操作呢?

  • 修改要删除德节点的前一个节点的指针
  • 将上一个节点的指针指向被删除节点的下一个指针

本题思路

但是这道题给定的参数只有删除的节点,所以原则上是无法通过遍历找到需要删除的前一个节点的。因此,这道题的解法有点取了。

  • 将要删除的节点的后一个节点的值复制到该节点
  • 将要删除的节点的指针指向复制节点的下一个节点

简而言之,就是复制一个删除的节点的后一个节点,然后把这个复制的节点删掉,就完成了这道题的要求。

var deleteNode = function(node){
	node.val = node.next.val;
	node.next = node.next.next;
}