请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。 示例 :
输入:head = [4,5,1,9], node = 5 输出:[4,1,9] 解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
现有一个链表 – head = [4,5,1,9],它可以表示为: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list
?链表
链表是由多个元素组成的列表,链表中的元素储存不连续,用next指针连接在一起。
🎄数组:增删非数组元素需要移动元素
?链表:增删非首尾元素不需要移动元素只需要更改next的指向即可
秘 JavaScript中没有链表,但是可以用object来模拟链表
const a = { val: 'a' }
const b = { val: 'b' }
const c = { val: 'c' }
const d = { val: 'd' }
a.next = b;
b.next = c;
c.next = d;
遍历链表
👉遍历链表就是跟着链表从链表的头元素(head)一直走到尾元素(但是不包含链表的头节点,头通常用来作为链表的接入点)
🤦?♂?还有一个问题,链表的尾元素指向一个null节点
let p = a
while (p) {
console.log(p.val)
p = p.next
}
插入链表
const f = { val: 'f' }
c.next = f
f.next = d
删除链表
c.next = d
💹题目分析
- 删除上一个节点的指针即可,但是无法获取上一个节点的指针,因为链表中的节点只会指向下一个节点
- 怎么在不知道上一个节点指针的情况下还能删除呢? 可以将被删除的节点转移到下一个节点
- 也就是将下一个节点删除,但是要在删除之前将下一个节点的值转移到这个节点
💯代码实现
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next;
};
- 没有循环所以时间复杂度是O(1)
- 没有数组或者矩阵所以空间复杂度也是O(1)
下面是执行结果,大家有什么更好的方法欢迎指教👉🙋?♂?🙋?♀?
题目分析二:
如何让自己在世界上消失,但又不死? ---------------------------------------------------------------------------------- 将自己完全变成另一个人,再杀了那个人就行了。
|