LeetCode第206题:反转链表

79 阅读1分钟

题目:输入一个链表,反转链表后,输出新链表的表头。

首先这是一道链表的题目,我们做这种类似的题最好的做法是先画出链表的结构图,再来想办法解决。

image-20210413221159216.png

首先反转就是将第一个成为最后一个,最后一个称为第一个。

我们的大方向是从第一个结点开始,向后遍历,然后将每一个的next结点指向上一个结点pre(第一个指向null)

因此我们可以列出一个步骤:

  1. 定义pre(空)记录当前结点的上一个结点,定义next(空)用来保存记录当前结点的next结点,定义current(当前head)用来保存当前的结点
  2. 开启循环,条件为current不为空
  3. 开始结点循环

首先将next指向当前结点的next结点

将当前结点的next指向pre结点

将pre指向current以进位(因为我们要使用保持pre、current、next的顺序)

再将current指向next。

  1. 返回pre,因为这时的current最后指向了next,next为null,因此只有pre是最后一个数
  function ReverseList(pHead) {
    var pre=null;
    var current=pHead;
    var next=pHead;
    while (current) {
      next=current.next;
      current.next=pre;
      pre=current;
      current=next;
      // [current.next,pre,current]=[pre,current,current.next]//使用es6的结构赋值
    }
    return pre;
  }