Java链表题:合成两个单调递增的链表

这篇博客介绍如何在Java中合并两个单调递增的链表,以保持合成后链表的单调不减性质。通过递归方法,比较当前节点的值,将较小的节点作为新链表的头节点,并继续递归合并剩余部分。

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

public class ListNode {

    int val;

    ListNode next = null;

 

    ListNode(int val) {

        this.val = val;

    }

}*/

public class Solution {

    public ListNode Merge(ListNode list1,ListNode list2) {

        

    }

}

Code:

public  ListNode Merge(ListNode list1, ListNode list2) {
            ListNode head;
            if (list1 == null) {
                return list2;
            }
            if (list2 == null) {
                return list1;
            }
            if (list1.val < list2.val) {
                head = list1;
                head.next = Merge(list1.next, list2);
            } else {
                head = list2;
                head.next = Merge(list1, list2.next);
            }
            return head;
        }

思路:利用递归,谁小谁做头结点,然后head.next=Merge() 来递归完成

CODE:

 

package 牛客;

import edu.xaled.List;

public class 合并两个排序的链表 {
    public static class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }

    }
    public ListNode Merge(ListNode list1, ListNode list2) {
        if (list1 == null)
            return list2; // 判断到某个链表为空就返回另一个链表。如果两个链表都为空呢?
        // 没关系,这时候随便返回哪个链表,不也是空的吗?
        if (list2 == null)
            return list1;
        ListNode list0 = null;// 定义一个链表作为返回值
        if (list1.val < list2.val) {// 判断此时的值,如果list1比较小,就先把list1赋值给list0,反之亦然
            list0 = list1;
            list0.next = Merge(list1.next, list2);// 做递归,求链表的下一跳的值
        } else {
            list0 = list2;
            list0.next = Merge(list1, list2.next);
        }
        return list0;
    }

    private ListNode head=null;//头指针为空
    private int size=0;


//    public static void display(ListNode head) {
//        for(ListNode c=head;c!=null; c=c.next) {
//            System.out.printf("(%d)->",c.val);
//        }
//        System.out.printf("null");
//        System.out.printf("%n");
//    }
    public static void main(String[] args) {
        ListNode head1 = new ListNode(1);
        head1.next = new ListNode(3);
        head1.next.next = new ListNode(5);
        head1.next.next.next = new ListNode(7);
        head1.next.next.next.next = new ListNode(9);

        ListNode head2 = new ListNode(2);
        head2.next = new ListNode(3);
        head2.next.next = new ListNode(6);
        head2.next.next.next = new ListNode(8);
        head2.next.next.next.next = new ListNode(10);

        合并两个排序的链表 s = new 合并两个排序的链表();
        ListNode listNode = s.Merge(head1,head2);
        while (listNode.next != null) {
            System.out.println(listNode.val);
            listNode = listNode.next;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值