实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
今天遇到一个很简单的,其实我觉得不简单,主要是自己没弄明白题目的意思。但我看到这道题目的通过率很高。
根据题目我理解为,只要不是第一个和最后一个那么中间的都可以随便删除,但我编写的程序,发现并不正确,于是我就删除中间的那一个,结果还是不正确,特别让我觉得诡异的是,我在测试的过程中,能够正常输出的结果,但是在 leetCode 中却不能正常输出,好像官方压根就传入的不是链表,很莫名其妙,但我又不想看别人讲解,所以先保留到这里。我争取早点想到,然后写出来。我测试的数据为:
{
val: 4,
next: {
val: 5,
next: {
val: 1,
next: {
val: 9,
next: null,
},
},
},
}
通过我的程序得到的结果的确是 4,1,9 。
但是在 leetCode 上的结果却是:
反正现在的我很懵逼,按道理题目就那么几个字,不应该会弄错,结果,还是自己太菜了。
愚蠢的我又迷路了,我仔细读了读题,发现传入的节点就是要删除的节点。
我的算法实现为:
var deleteNode = function (node) {
if (!node.next) {
return;
}
node.val = node.next.val;
node.next = node.next.next;
};
至于为啥这样写,看我以前的这篇: leetcode删除链表中的节点(每日计划)
来源:力扣(LeetCode)