首页 > 其他 > 详细

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

时间:2017-07-24 15:58:20      阅读:273      评论:0      收藏:0      [点我收藏+]
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);
        }
    }
}

 

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

原文:http://www.cnblogs.com/studyDetail/p/7229210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!