递归实现两个有序链表的合并

Posted Miss_wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现两个有序链表的合并相关的知识,希望对你有一定的参考价值。

package com.wyl.linklist;

/**
 * 合并两个链表
 * @author wyl
 */
public class MergeLinkList {

    /**
     * 内部类,链表节点的结构
     * @author wyl
     *
     */
    public static class Node{
        private int val; //节点值
        private Node next; //节点的后继节点
        public Node(){
        }
        public Node(int val){
            this(val,null);
        }
        public Node(int val,Node next){
            this.val = val;
            this.next = next;
        }
        public int getVal() {
            return val;
        }
        public void setVal(int val) {
            this.val = val;
        }
        public Node getNext() {
            return next;
        }
        public void setNext(Node next) {
            this.next = next;
        }
    }
    /**
     * 递归实现两个排序链表的合并
     * @param l1
     * @param l2
     * @return
     */
    public Node merge(Node l1, Node l2){
        Node node = null;
        if(l1 == null || l2 == null){
            return l1==null?l2:l1;
        } else if(l1 != null || l2 != null){
            if(l1.val < l2.val){
                node = l1;
                node.next = merge(l1.next, l2);
            }else{
                node = l2;
                node.next = merge(l1, l2.next);
            }
        }
        return node;
    }
    public static void main(String[] args) {
        
        MergeLinkList mergeLinkList = new MergeLinkList();
        Node node = new Node(10); //存储排序好的偶数值节点
        for(int i=10; i>0; i=i-2){
            node = new Node(i, node);
        }
        
        Node node2 = new Node(15);//存储排序好的奇数值节点
        for(int i=15; i>0; i=i-2){
            node2 = new Node(i, node2);
        }
        
//        Node n = mergeLinkList.merge(node, node2);
//        Node n = mergeLinkList.merge(node, null);
//        Node n = mergeLinkList.merge(null, node2);
        Node n = mergeLinkList.merge(null, null);
        if(n != null){
            while(n.next != null){
                System.out.println(n.val);
                n = n.next;
            }
            System.out.println(n.val);
        }
    }
}

 

以上是关于递归实现两个有序链表的合并的主要内容,如果未能解决你的问题,请参考以下文章

合并两个有序链表(java实现)

leetCode第21题——合并两个有序链表

多个有序链表的合并

合并两个有序链表

21_合并两个有序链表

LeetCode Java刷题笔记—21. 合并两个有序链表