【算法萌新闯力扣】:合并两个有序链表

    力扣题目:合并两个有序链表

开篇

  今天是备战蓝桥杯的第24天及算法村开营第2天。根据算法村的讲义,来刷链表的相关题目。今天要分享的是合并两个有序链表。

题目链接: 21.合并两个有序链表

题目描述

代码思路

  通过创建一个新链表,然后遍历两个链表,每次取两个链表指向的值中小的那个,放入新链表中,直到两个遍历完成。

 当然,要优化一下,当有一个链表遍历完成时,我们可以直接让新链表的表尾指向另外一个链表未遍历的部分。

代码纯享版

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode head = new ListNode(-1);
        ListNode node = head;
        while(list1 != null && list2 != null){
            if(list1.val > list2.val) {
            node.next = list2;
            list2 = list2.next;
            }
             else{
                node.next = list1;
                list1 = list1.next;
            }
            node = node.next;
        }
        if(list1 == null) node.next = list2;
        else node.next = list1;
        return head.next;
    }
}

代码逐行解析版

java 复制代码
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode head = new ListNode(-1); //创建一个头结点,赋值为-1,值是随便赋的。头结点主要是为了方便最后返回链表
        ListNode node = head; //创建结点node指向head,之后的操作都由node指向,head就一直处在链表的头
        while(list1 != null && list2 != null){ //循环条件是两个链表都不为空时
            if(list1.val > list2.val) {//如果表1的值大于表2
            node.next = list2; //把表2的值赋给node.next,注意不是node,赋给node的话,head就没意义了
            list2 = list2.next; //list2指向下一个结点
            }
             else{ //与上面同理,把list2换成list1
                node.next = list1; 
                list1 = list1.next;
            }
            node = node.next; //node指向下一个结点
        }
        if(list1 == null) node.next = list2;//循环结束证明还有至多一个表不为空,让node.next指向不为空的表
        else node.next = list1;
        return head.next; //返回head.next,注意:head是-1,不是我们要返回的
    }
}

结语

 如果这道力扣题的分享对您有所帮助,点个关注,我会每天更新力扣题目的讲解,与大伙儿一同向前迈进!

相关推荐
.道阻且长.9 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
·薯条大王9 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
To_OC10 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
白狐_79811 小时前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
ZJH__GO12 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆12 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光12 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林13 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
Forever Nore13 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法