leetcode 删除中间节点

122 阅读1分钟

实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。

 

示例:

输入:单向链表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)