合并两个已经排序好的链表

本文介绍如何合并两个已排序的单调递增链表,通过Java实现非递归和递归两种方法,确保合并后的新链表依然单调递增。最终输出结果为1->2->3->4->5->6->7->8->9->10。
摘要由CSDN通过智能技术生成

一,问题描述
1,输入两个单调递增的链表,输出两个链表合成后的链表。新链表也是单调递增的。

二,程序如下(Java实现):

1,非递归合并有序链表

import java.util.*;
class ListNode{

    int val;
    ListNode next;
    ListNode(int x)
    {
        val=x;
    }
}


public class Test{

    public ListNode Merge(ListNode node1,ListNode node2)
    {
        if(node1==null&&node2==null)
        {
            return null;
        }
        if(node1==null)
        {
            return node2;
        }
        if(node2==null)
        {
            return node1;
        }

        ListNode node3=null;   //这个作为偏移指针
        ListNode node4=null;  //这个作为头指针

        while(node1!=null&&node2!=null)
        {
            if(node1.val<=node2.val)
            {
                if(node4==null)
                {
                    node3=node1;
                    node4=node1;
                }
                else
                {
                    node3.next=node1;
                    node3=node3.next;
                }

                node1=node1.next;
            }
            else
            {
                if(node4==null)
                {
                    node3=node2;
                    node4=node2;
                }
                else
                {
                    node3.next=node2;
                    node3=node3.next;
                }

                node2=node2.next;
            }

        }

        if(node1!=null)
        {
            node3.next=node1;
        }
        if(node2!=null)
        {
            node3.next=node2;
        }

        return node4;
    }

    public static void main(String []args)
    {
        Test test=new Test();
        ListNode node11=new ListNode(1);
        ListNode node12=new ListNode(3);
        ListNode node13=new ListNode(5);
        ListNode node14=new ListNode(7);
        ListNode node15=new ListNode(9);

        ListNode node21=new ListNode(2);
        ListNode node22=new ListNode(4);
        ListNode node23=new ListNode(6);
        ListNode node24=new ListNode(8);
        ListNode node25=new ListNode(10);

        node11.next=node12;
        node12.next=node13;
        node13.next=node14;
        node14.next=node15;

        node21.next=node22;
        node22.next=node23;
        node23.next=node24;
        node24.next=node25;


        ListNode node=test.Merge(node11,node22);

        while(node!=null)
        {
            System.out.print(node.val+"->");
            node=node.next;
        }
    }
}

2,递归方式合并有序链表

import java.util.*;
class ListNode{

    int val;
    ListNode next;
    ListNode(int x)
    {
        val=x;
    }
}


public class Test{

    public ListNode Merge(ListNode node1,ListNode node2)
    {
        if(node1==null)
        {
            return node2;
        }
        if(node2==null)
        {
            return node1;
        }

        if(node1.val<=node2.val)
        {
            node1.next=Merge(node1.next,node2);
            return node1;
        }
        else
        {
            node2.next=Merge(node1,node2.next);

            return node2;
        }
    }

    public static void main(String []args)
    {
        Test test=new Test();
        ListNode node11=new ListNode(1);
        ListNode node12=new ListNode(3);
        ListNode node13=new ListNode(5);
        ListNode node14=new ListNode(7);
        ListNode node15=new ListNode(9);

        ListNode node21=new ListNode(2);
        ListNode node22=new ListNode(4);
        ListNode node23=new ListNode(6);
        ListNode node24=new ListNode(8);
        ListNode node25=new ListNode(10);

        node11.next=node12;
        node12.next=node13;
        node13.next=node14;
        node14.next=node15;

        node21.next=node22;
        node22.next=node23;
        node23.next=node24;
        node24.next=node25;


        ListNode node=test.Merge(node11,node22);

        while(node!=null)
        {
            System.out.print(node.val+"->");
            node=node.next;
        }
    }
}

输出结果:
1->2->3->4->5->6->7->8->9->10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值