反转链表 js

反转链表

反转一个单链表,主要就是改变节点的next值,每次循环的存储next的值,防止后面指针丢失了
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

循环

注意:pre的值就是翻转的链表

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
let reverseList = (head) => {
        if (!head) {
          return null;
        }
        let pre = null;
        cur = head;
        while (cur) {
          //保存next
          let next = cur.next;
          //替换next
          cur.next = pre;
          //设置pre的值
          pre = cur;
          //设置当前项的值
          cur = next;
        }
      return pre;
      };

每次循环pre和cur的值

次数 pre cur
第一次 1->null 2->3->4->5->NULL
第二次 2->1->null 3->4->5->NULL
第三次 3->2->1->null 4->5->NULL
第四次 4->3->2->1->null 5->NULL
第五次 5->4->3->2->1->null NULL

递归

let reverseList = (head) => {
        if (!head) {
          return null;
        }
        let reverse = (pre, cur) => {
          if (cur) {
            // 保存 next 节点
            let next = cur.next;
            cur.next = pre;
            return reverse(cur, next);
          }
          return pre;
        };
        return reverse(null, head);
      };
posted @ 2021-05-30 09:28  黑黑哈哈  阅读(833)  评论(0编辑  收藏  举报