首页 > Web开发 > 详细

反转链表 js

时间:2021-05-30 10:53:53      阅读:18      评论:0      收藏:0      [点我收藏+]

反转链表

反转一个单链表,主要就是改变节点的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);
      };

反转链表 js

原文:https://www.cnblogs.com/heihei-haha/p/14827086.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!