java之合并链表的两种方法

来源:互联网 发布:中日二战实力对比 知乎 编辑:程序博客网 时间:2024/05/16 06:48

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序。链表的结构如下:

class LNode { // 单链表的存储结构int value;LNode next;public LNode() {}public LNode(int value) {this.value = value;this.next = null;}public LNode(int value, LNode next) {this.value = value;this.next = next;}}
合并链表的两种方法:

package LinkList;public class MergeMain {// public LNode head = new LNode();// 创建空的头节点public void insertHead(int value, LNode node) { // 插入节点,从头开始LNode link = new LNode(value); // 创建一个带value值的节点link.next = node.next;node.next = link;}// 方法一,不用递归public LNode Merge(LNode node1, LNode node2) {if (node1 == null)return node2;if (node2 == null)return node1;LNode p1 = node1.next;LNode p2 = node2.next;LNode p;p = node1;while (p1 != null && p2 != null) {if (p1.value <= p2.value) {p.next = p1;p = p1;p1 = p1.next;} else {p.next = p2;p = p2;p2 = p2.next;}if (p1 != null) {p.next = p1;}if (p2 != null) {p.next = p2;}}return node1;}public void print(LNode node) {LNode p = node;while (p != null) {System.out.print(p.value + " ");p = p.next;}}// 方法二,使用递归调用public LNode Merge1(LNode node1, LNode node2) {if (node1 == null)return node2;else if (node2 == null)return node1;LNode pMergeHead = null;if (node1.next.value < node2.next.value) {pMergeHead = node1;pMergeHead.next = Merge1(node1.next, node2);} else {pMergeHead = node2;pMergeHead.next = Merge1(node1, node2.next);}return pMergeHead;}public static void main(String[] args) {MergeMain mergeMain = new MergeMain();LNode node1 = new LNode();LNode node2 = new LNode();for (int i = 20; i > 0; i -= 2) {mergeMain.insertHead(i, node1);}System.out.println("打印链表1");mergeMain.print(node1.next);System.out.println();for (int i = 22; i > 0; i -= 3) {mergeMain.insertHead(i, node2);}System.out.println("打印链表2");mergeMain.print(node2.next);System.out.println();LNode node3 = new LNode();LNode node4 = new LNode();for (int i = 20; i > 0; i -= 2) {mergeMain.insertHead(i, node3);}System.out.println("打印链表1");mergeMain.print(node3.next);System.out.println();for (int i = 22; i > 0; i -= 3) {mergeMain.insertHead(i, node4);}System.out.println("打印链表2");mergeMain.print(node4.next);System.out.println();System.out.println("1--------使用方法1来合并链表---------------");LNode node = mergeMain.Merge(node1, node2);mergeMain.print(node.next);System.out.println();System.out.println("1--------使用方法2来合并链表---------------");LNode p = mergeMain.Merge(node3, node4);mergeMain.print(p.next);System.out.println();}}

打印结果:

打印链表1
2 4 6 8 10 12 14 16 18 20 
打印链表2
1 4 7 10 13 16 19 22 
打印链表1
2 4 6 8 10 12 14 16 18 20 
打印链表2
1 4 7 10 13 16 19 22 
1--------使用方法1来合并链表---------------
1 2 4 4 6 7 8 10 10 12 13 14 16 16 18 19 20 22 
1--------使用方法2来合并链表---------------
1 2 4 4 6 7 8 10 10 12 13 14 16 16 18 19 20 22 





0 0
原创粉丝点击