[力扣]合并两个有序链表

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

该题目来自力扣题库

示例

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

思路

设立一个新链表,选择带有头节点是傀儡节点的新链表代码书写起来较为简便。
设一个新链表的尾节点,这个尾节点就用于在新链表尾部插入节点所用。
循环遍历 l1 链表和 l2 链表,判断大小后对应添加到新链表的尾部,循环结束的条件是 遍历 l1链表或者 l2 链表到了末尾,那么就退出循环。
判断哪个链表还没有遍历完成,没有遍历完成的就把剩下的节点一齐加入到新链表末尾。

代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }
        if(l2==null){
            return l1;
        }
        //设置一个傀儡节点
        ListNode newHead=new ListNode(-1);
        //cur1和cur2分别遍历l1和l2链表
        ListNode cur1=l1;
        ListNode cur2=l2;
        //新链表的尾部
        ListNode newtail=newHead;
        while(cur1!=null&&cur2!=null){
             if(cur1.val<=cur2.val){
                newtail.next=cur1;
                 cur1=cur1.next;
             }else{
                newtail.next=cur2;
                 cur2=cur2.next;
             }
             newtail=newtail.next;  
        }
        //哪个不为空,就把哪个链表剩下的所有节点尾插到新链表结尾
        if(cur1!=null){
            newtail.next=cur1;
        }
        if(cur2!=null){
            newtail.next=cur2;
        }
       return newHead.next;
    }
}
发布了24 篇原创文章 · 获赞 46 · 访问量 3339

猜你喜欢

转载自blog.csdn.net/qq_45619426/article/details/104542316
今日推荐