合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

LeetCode 21.合并两个有序链表

import java.util.*;

class ListNode {
    public int val;
    ListNode next;
    public ListNode(){}
    public ListNode(int val){
        this.val=val;
        this.next=null;
    }
}

class LinkList{
    ListNode first;
    public LinkList(int[] a,int n){         //尾插法建立单链表
        first=new ListNode();
        ListNode r=first;
        for(int i=0;i<n;i++)
        {
            ListNode s=new ListNode();      //为每个数组元素建立一个节点
            s.val=a[i];
            r.next=s;                       //使当前节点的下一个节点指向s
            r=s;
        }
        r.next=null;                       //终端节点的下一个节点置为空
    }
}

class Solution{
    public ListNode mergeTwoLists(ListNode l1,ListNode l2){
        ListNode prehead=new ListNode(-1);
        ListNode prev=prehead;
        while(l1!=null && l2!=null){
            if(l1.val<=l2.val){
                prev.next=l1;
                l1=l1.next;
            }else{
                prev.next=l2;
                l2=l2.next;
            }
            prev=prev.next;
        }
        prev.next=l1==null ? l2:l1;
        return prehead.next;
    }
}
class Print{
    public Print(ListNode p){
        while(p!=null)
        {
            System.out.print(p.val);
            p=p.next;
        }
    }
}
public class Main{
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        int m=in.nextInt();    //第一个链表的长度
        int n=in.nextInt();    //第二个链表的长度
        int i;
        int[] arr1=new int[105];
        int[] arr2=new int[105];
        for(i=0;i<m;i++)
            arr1[i]=in.nextInt();
        LinkList list1=new LinkList(arr1,m);
        for(i=0;i<n;i++)
            arr2[i]=in.nextInt();
        LinkList list2=new LinkList(arr2,n);
        ListNode l1=list1.first.next;
        ListNode l2=list2.first.next;
        ListNode ret = new Solution().mergeTwoLists(l1, l2);
        Print pt=new Print(ret);           //打印链表
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值