您的位置:首页 > 其它

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

2017-07-24 15:34 316 查看
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);
}
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: