力扣刷题-合并两个有序链表-javascript基础算法题2

题目:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

 

来源:力扣(LeetCode)
链接:力扣

解题思路:

       概念理解:

        链表:是一种物理存储上非连续的,数据元素的逻辑顺序通过链表的指针链接,而实现的线性存储结构。

        特点:由一系列的节点组成,节点在运行时动态生成,每个节点包含两个部分:

数据域: 存储数据元素

指针域: 存储下一个节点地址

链表

         

        思路:

两个升序链表,要升序排列。先我们要考虑如何比较,这里,要满足升序排列,我们应该两两比较之后返回最小的排在前面,通过反复的两两比较,得到一条升序的链。

大概就是上面的1 与下面的1 比较 ,返回上面的1,生成节点1

然后上面的1的链表.next再指向2, 2与下面的1比较,小的返回,生成节点1,然后下方.next,指向3

上方2与下方3比较,2小,生成节点2,上方.next ,再指向4,

看这个应该会比较好理解

 

自此往复。。。 

但这里还要额外注意一点哦,当两条链,有一条已经走完了,而另一条还部位空,剩下部分要整体复制到新生成的链表里哦!!!

 

步骤:

  1. 创建节点
  2. while循环(这样才能循环往复的比较,直到有一个空了,才不用比较)
  3. while里的if()判断,升序返回小的,降序返回大的。生成新的节点,于此同时,移动链表
  4. 判断链表是否有剩余,剩余的整体复制到新生成的链表里
  5. 返回新的链表。(这里注意一个重点,dummy存储了该新的链表的头节点,而头部似乎是空的(这里我并不太确定),于是乎我们返回 dummy.next(虚拟头节点的节点,才是真正存了内容的东西))

代码:

var mergeTwoLists = function(list1, list2) {
        let node = new ListNode();
            // 创建节点
            let dummy = node;
            //不为空才能执行
            
            while(list1 !== null && list2 !== null){
                //升序!!找小的,先插入节点
                if(list1.val < list2.val){
                    node.next = list1;
                    list1 = list1.next;
                }else{
                    node.next = list2;
                    list2 = list2.next;
                }
                node = node.next;
            }

            if(list1 !== null){
                node.next = list1;
            }
            if(list2 !== null){
                node.next = list2;
            }

            return dummy.next
};

最后:

害,算法这东西真是令人头疼啊,等我更加深刻理解之后,我再来补充点别的吧,先就这样吧。

如果题目中,有什么不正确的地方,欢迎各位大佬们批评指正,希望大家都越来越好吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值