程序员代码面试指南刷题--第二章.合并两个有序的单链表

题目描述
给定两个升序的单链表的头节点 head1 和 head2,请合并两个升序链表, 合并后的链表依然升序,并返回合并后链表的头节点。

输入描述:

两个升序的单链表的头节点 head1 和 head2

输出描述:

在给定的函数内返回新链表的头指针。

示例1
输入
5
1 2 3 4 5
6 
7 8 9 10 11 12

输出
1 2 3 4 5 7 8 9 10 11 12

备注:

保证链表的长度不大于1000000

解法一:按题意

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main{
    public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    public static ListNode merge(ListNode h1,ListNode h2){
        if(h1==null||h2==null) return h1!=null?h1:h2;
        ListNode tmp1 = h1;
        ListNode tmp2 = h2;
        ListNode head = null;
        if(tmp1.val<tmp2.val){
            head = tmp1;
            tmp1 = tmp1.next;
        }else{
            head = tmp2;
            tmp2 = tmp2.next;
        }
        ListNode pre = head;
        while(tmp1!=null&&tmp2!=null){
            if(tmp1.val<=tmp2.val){
                pre.next = tmp1;
                pre = tmp1;
                tmp1 = tmp1.next;
            }else{
                pre.next = tmp2;
                pre = tmp2;
                tmp2 = tmp2.next;
            }
        }
        pre.next = tmp1==null?tmp2:tmp1;
        return head;
    }
    public static ListNode creat() throws Exception{
       int size = Integer.valueOf(br.readLine());
       String[] ss = br.readLine().trim().split(" ");
       ListNode head = new ListNode(0);
       ListNode pre = head; 
       for(int i=0;i<size;i++){
           pre.next = new ListNode(Integer.parseInt(ss[i]));
           pre = pre.next;
       }
       return head.next;
    }
    public static void main(String[] args) throws Exception{
        ListNode h1 = creat();
        ListNode h2 = creat();
        ListNode result = merge(h1,h2);
        StringBuilder sb = new StringBuilder();
        while(result!=null){
            sb.append(result.val+" ");
            result = result.next;
        }
        System.out.println(sb.toString());
    }
}
class ListNode{
    int val;
    ListNode next;
    public ListNode(int val){
        this.val = val;
        this.next = null;
    }
}

ps:这个系列需要写出完整代码,oj平台牛客网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值