合并两个有序链表(递归非递归方法)
2016-05-20 12:34
337 查看
前言: 将两个有序链表合并(链表头结点关键字最小,然后逐个增大)
直接上代码
class Node { int val; Node next; Node(int x) { val = x; } } public class LinkedList { public static void main(String[] args) { LinkedList l = new LinkedList(); Node l1 = new Node(1); l1.next = new Node(5); l1.next.next = new Node(7); Node l2 = new Node(3); l2.next = new Node(9); l2.next.next = new Node(10); Node l3 = l.mergeList2(l1, l2); Node cur = l3; while (cur != null) { System.out.print(cur.val+" "); cur = cur.next; } } //recursive public Node mergeList(Node l1, Node l2) { if (l1 == null) { return l2; } if (l2 == null) { return l1; } if (l1.val < l2.val) { l1.next = mergeList(l1.next, l2); return l1; } else { l2.next = mergeList(l1, l2.next); return l2; } } //iteratively public Node mergeList2(Node l1, Node l2) { // if (l1 == null) return l2;//不需要再判断l1,l2是否为空了 // if (l2 == null) return l1; Node dummy = new Node(0);//有了假的头,新链表的头结点和非头结点都可以不加区分地追加在链表尾部 Node cur = dummy; while (l1 != null && l2 != null) { if (l1.val < l2.val) { cur.next = l1; l1 = l1.next; } else { cur.next = l2; l2 = l2.next; } cur = cur.next;//当前结点为下一结点 } cur.next = (l1 != null) ? l1 : l2;//归并排序思想 return dummy.next;//注意返回的是dummy.next } }
相关文章推荐
- Java+WebSocket+WebRTC实现视频通话实例
- 滑块控件
- 垂直居中display:table;
- 辞职
- 自定义日志工具LogUtil
- STM32命名规则
- 使用unison 同步文件
- 几个有用的开发论坛,网站
- linux CentOS6.5安装PostgreSQL9.4.3——傻瓜笔记
- 几个有用的开发论坛,网站
- jQuery validate验证隐藏表单(hidden)域
- 二分查找递归非递归
- 打印十字图---文字图形
- Eclipse 常用快捷键
- 关于什么是事件冒泡和如何取消事件冒泡的讨论!
- 阿里云seo常见问题
- POJ 2155 Matrix(二维树状数组模板)
- 7.spark Streaming 技术内幕 : 从DSteam到RDD全过程解析
- 12 种编程语言的起源故事
- C#技术开发