递归实现两个有序链表的合并
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); } } }
相关文章推荐
- 面试题17:合并两个有序链表,递归和非递归实现
- 合并两个有序链表,递归实现
- 递归实现合并两个有序链表成一个链表依然有序
- 递归实现合并两个有序链表
- 合并两个有序链表(Java递归实现)
- 两个有序链表合并递归实现及非递归实现
- 用递归方法实现两个链表head1和head2各自有序,请把它们合并成一个链表仍然有序。(c/c++)
- 实现两个有序链表的合并
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- 两个有序链表的合并(递归)
- 递归实现有序链表(不需要使用两个指针)
- 链表操作(将两个链表合并成一个链表依然有序,非递归方法和迭代方法)
- 合并两个有序链表(非递归与递归)
- Java 非递归 和非递归方法 实现两个有序单链表的合并
- Java实现两个有序链表的合并
- 合并两个排序的链表---递归实现
- 【剑指offer】链表相关-合并两个有序链表&递归写法17
- 有序链表的合并(递归实现)
- 剑指offer--递归非递归合并两个有序链表