反转链表

递归实现:

实现逻辑是两个两个进行比较

反转链表_第1张图片

  1. 找到最后一个节点

  2. 让newHead=最后一个节点

  3. 将最后一个节点的next指向老的head

  4. 将老的next置为null

//递归反转
  reverseList() {
    //1 2
    let head = this.head;
    function reverse(head) {
      //终止条件
      if (head == null || head.next === null) return head;
      const newHead = reverse(head.next); //可以找到链表的最终节点
      head.next.next = head;
      head.next = null;
      return newHead;
    }
    return reverse(head);
  }

while实现反转:

反转链表_第2张图片

  reverseList() {
    let head = this.head;
    if (head == null || head.next == null) return head;
    let newHead = null;
    while (head) {
      const temp = head.next; //保存第2个节点
      head.next = newHead; //将1指向null
      newHead = head; //将新的链表头指向1
      head = temp; //让老的头指向2
    }
    return newHead;
  }

 

你可能感兴趣的:(JS)