zoukankan      html  css  js  c++  java
  • 递归实现两个有序链表的合并

    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);
            }
        }
    }
  • 相关阅读:
    JSTL之迭代标签库
    java中的IO流
    浅谈代理模式
    TreeSet集合
    网络编程之UDP协议
    Java中的多线程
    Java中的面向对象
    JavaScript 函数表达式
    JavaScript 数据属性和访问器属性
    JavaScript 正则表达式语法
  • 原文地址:https://www.cnblogs.com/studyDetail/p/7229210.html
Copyright © 2011-2022 走看看