• 算法疑难(js实现)---6、反转链表


    算法疑难(js实现)---6、反转链表

    一、总结

    一句话总结:

    1、遍历链表,把链表里面的每个节点的值都拿下来,存在数组里面
    2、再次遍历链表,将数组里面的值倒序的赋值给每一个节点的val域就实现了链表的反转
    //反转链表
    function reverseList(head){
        //1、遍历链表,把链表里面的每个节点的值都拿下来,存在数组里面
        //(在这里我们存的节点的值,而不是存的整个节点,这样是可以节约内存的)
        let arr=[];//arr用于存储链表的节点的值
        let p=head;//p用于遍历链表
        while(p){
            arr.push(p.val);
            p=p.next;
        }
    
        //2、再次遍历链表,将数组里面的值倒序的赋值给每一个节点的val域就实现了链表的反转
        //(我们没有考虑新建一个链表,而是用了原来的链表,可以节约创建新链表的时间和内存)
        p=head;
        while(p){
            p.val=arr.pop();
            p=p.next;
        }
        return head;
    }

    1、反转链表的注意点?

    a、第一次遍历我们存的是节点的值而不是节点,这样可以节约内存
    b、第二次遍历我们没有新建链表而是用的原链表,因为这样可以节约创建新链表的时间和内存
    //反转链表
    function reverseList(head){
        //1、遍历链表,把链表里面的每个节点的值都拿下来,存在数组里面
        //(在这里我们存的节点的值,而不是存的整个节点,这样是可以节约内存的)
        let arr=[];//arr用于存储链表的节点的值
        let p=head;//p用于遍历链表
        while(p){
            arr.push(p.val);
            p=p.next;
        }
    
        //2、再次遍历链表,将数组里面的值倒序的赋值给每一个节点的val域就实现了链表的反转
        //(我们没有考虑新建一个链表,而是用了原来的链表,可以节约创建新链表的时间和内存)
        p=head;
        while(p){
            p.val=arr.pop();
            p=p.next;
        }
        return head;
    }

    二、反转链表

    博客对应课程的视频位置:6、反转链表
    https://www.fanrenyi.com/video/20/242

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>反转链表</title>
     6 </head>
     7 <body>
     8 <!--
     9 需求:
    10 写一个函数,输入一个链表,反转链表后,输出新链表的表头。
    11 
    12 -->
    13 <script>
    14     //创建链表的节点:在js里面可以用构造函数来创建链表的节点
    15     function Node(val){
    16         this.val=val;
    17         this.next=null;
    18     }
    19     //新建一个链表
    20     function createList(arr){
    21         let head=new Node(arr[0]);
    22         let tail=head;
    23         for(let i=1;i<=arr.length-1;i++){
    24             tail.next=new Node(arr[i]);
    25             tail=tail.next;
    26         }
    27         return head;
    28     }
    29     let list=createList([1,2,3,4,5]);
    30     //console.log(list);
    31 
    32     //反转链表
    33     function reverseList(head){
    34         //1、遍历链表,把链表里面的每个节点的值都拿下来,存在数组里面
    35         //(在这里我们存的节点的值,而不是存的整个节点,这样是可以节约内存的)
    36         let arr=[];//arr用于存储链表的节点的值
    37         let p=head;//p用于遍历链表
    38         while(p){
    39             arr.push(p.val);
    40             p=p.next;
    41         }
    42 
    43         //2、再次遍历链表,将数组里面的值倒序的赋值给每一个节点的val域就实现了链表的反转
    44         //(我们没有考虑新建一个链表,而是用了原来的链表,可以节约创建新链表的时间和内存)
    45         p=head;
    46         while(p){
    47             p.val=arr.pop();
    48             p=p.next;
    49         }
    50         return head;
    51     }
    52 
    53     console.log(reverseList(list));
    54 
    55 
    56 </script>
    57 </body>
    58 </html>

     
  • 相关阅读:
    GPS 经纬度
    TP5 分页数据加锚点
    修改layui的表单手机、邮箱验证可以为空怎么实现?
    转录调控实战 | 一文解决转录调控问题 | chIP-seq | ATAC-seq
    管家基因 | Human housekeeping genes
    各国脑计划概览
    原创
    RLE Plots: relative log expression
    Polygenic score
    皮尔逊残差 | Pearson residual
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12919579.html
Copyright © 2020-2023  润新知