合并两个排序的链表

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


首先分析合并两个链表的过程。

链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。

我们继续合并两个链表中剩余的结点。此时链表2的头结点的值小于链表1的头结点的值,因此链表2的头结点的值将是合并剩余结点得到的链表的头结点。我们把这个结点和前

面合并链表时得到的链表的尾节点链接起来,如图所示。


当我们得到两个链表中值较小的头结点并把它链接到已经合并的链表之后,两个链表剩余的结点依然是排序的,因此合并的步骤和之前的步骤是一样的。

这就是典型的递归的过程。


首先定义一个节点

//单链表进行考虑
public class ListNode {
    int val;   //自身值
    ListNode next = null;    //指向下一个节点
    ListNode(int val) {
        this.val = val;
    }
}


public class Solution {
     public ListNode Merge(ListNode pHead1,ListNode pHead2){
             if(pHead1 == null){
                    return pHead2;
             }else if(pHead2 == null){
                    return pHead1;
             }
             ListNode node = null;
             if(pHead1.val < pHead2.val){
                    node = pHead1;
                    node.next = Merge(pHead1.next, pHead2);
             }else{
                   node = pHead2;
                   node.next = Merge(pHead1, pHead2.next);
            }
            return node;

     }
     public static void main(String[] args) {
           ListNode node1 = new ListNode(1);
           ListNode node2 = new ListNode(3);
           ListNode node3 = new ListNode(5);
           ListNode node4 = new ListNode(7);
           node1.next = node2;
           node2.next = node3;
           node3.next = node4;
           node4.next = null;

           ListNode node11 = new ListNode(2);
           ListNode node12 = new ListNode(4);
           ListNode node13 = new ListNode(6);
           ListNode node14 = new ListNode(8);
           node11.next = node12;
           node12.next = node13;
           node13.next = node14;
           node14.next = null;

           Solution s = new Solution();
           ListNode node = s.Merge(node1, node11);
           while(node != null){
                 System.out.print(node.val + " ");
                 node = node.next;
           }
    }
}


结果为:

1 2 3 4 5 6 7 8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值