首页 > 代码库 > 递归实现两个有序链表的合并
递归实现两个有序链表的合并
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);
}
}
}
递归实现两个有序链表的合并
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。