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
- java之合并链表的两种方法
- 合并BIN文件的两种方法
- 合并BIN文件的两种方法
- 合并BIN文件的两种方法
- JS数组合并的两种方法
- 合并BIN文件的两种方法
- js数组合并的两种方法
- js数组合并的两种方法
- 【合并果子】的两种方法
- java实现合并两排序链表
- 详谈线性表之数组合并问题(两种方法)
- 合并两个顺序链表的两种方式
- 两有序链表的合并
- 合并两条排序的链表
- 纵向合并gridview单元格的两种方法
- 合并烧写程序BIN文件的两种方法
- 纵向合并gridview单元格的两种方法
- 合并BIN文件的两种方法 ---转载
- iterator in python
- 一次性更改数据库內拥有者不屬dbo的物件改成为dbo
- iOS 导出 ipa 包时 三个选项的意思
- 完整的FreeBSD软件安装方法
- Java加密技术(一)单向加密算法MD5&SHA&MAC与BASE64
- java之合并链表的两种方法
- C语言字符数组的初始化
- iOS开发系列--UITableView全面解析
- Range
- 扫描密码文件和组文件中的所有记录。
- 长度小于8000(varchar类型),以"逗号"分隔的字符串
- C# List<T>用法
- Oracle WebLogic Server 11g 集群部署On Linux
- 在SQL中参数值超过8000(TEXT类型)的处理方法,以"逗号"分隔的字符串