剑指offer 17. 合并两个排序的链表
来源:互联网 发布:淘宝类的app难做么 编辑:程序博客网 时间:2024/05/22 15:47
// 题目:合并两个增序链表// 解法1:非递归的方法public class Main {public static void main(String[] args) {ListNode n1 = new ListNode();ListNode n2 = new ListNode();ListNode n3 = new ListNode();ListNode n4 = new ListNode();ListNode t1 = new ListNode();ListNode t2 = new ListNode();ListNode t3 = new ListNode();ListNode t4 = new ListNode();n1.data = 1;n2.data = 3;n3.data = 5;n4.data = 7;t1.data = 2;t2.data = 4;t3.data = 6;t4.data = 8;n1.next = n2;n2.next = n3;n3.next = n4;t1.next = t2;t2.next = t3;t3.next = t4;ListNode result = mergeList(n1,t1);while(result!=null){System.out.println(result.data);result = result.next;}}public static ListNode mergeList(ListNode node1, ListNode node2) {if(node1 == null){return node2;}if(node2 == null){return node1;}ListNode result;ListNode temp;//返回链表中每次操作的结点if(node1.data<node2.data){//确定第一个返回的结点result = node1;temp = node1;node1 = node1.next;}else{result = node2;temp = node2;node2 = node2.next;}while(node1!=null && node2!=null){//一直比较,知道一个链表被遍历完if(node1.data<node2.data){temp.next = node1;temp = temp.next;node1 = node1.next;}else{temp.next = node2;temp = temp.next;node2 = node2.next;}}while(node1!=null){//把没有遍历完的部分连接到结果之后temp.next = node1;break;}while(node2!=null){temp.next = node2;break;}return result;}}// 解法2:递归的方法public class Main {public static void main(String[] args) {ListNode n1 = new ListNode();ListNode n2 = new ListNode();ListNode n3 = new ListNode();ListNode n4 = new ListNode();ListNode t1 = new ListNode();ListNode t2 = new ListNode();ListNode t3 = new ListNode();ListNode t4 = new ListNode();n1.data = 1;n2.data = 3;n3.data = 5;n4.data = 7;t1.data = 2;t2.data = 4;t3.data = 6;t4.data = 8;n1.next = n2;n2.next = n3;n3.next = n4;t1.next = t2;t2.next = t3;t3.next = t4;ListNode result = mergeList(n1,t1);while(result!=null){System.out.println(result.data);result = result.next;}}public static ListNode mergeList(ListNode node1, ListNode node2) {if(node1 == null){//如果一个遍历完了就返回另一个return node2;}if(node2 == null){return node1;}ListNode result;if(node1.data<node2.data){//找到当前节点比较小的作为返回result = node1;node1 = node1.next;}else{result = node2;node2 = node2.next;}result.next = mergeList(node1,node2);//递归的判断返回结点的下一节点return result;}}
0 0
- 17.合并两个排序的链表|剑指Offer
- 剑指offer--17.合并两个排序的链表
- 剑指offer 17. 合并两个排序的链表
- 剑指offer 17-合并两个排序表的链表
- 剑指Offer之合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 【剑指offer】Q17:合并两个排序的链表
- 剑指offer-17:合并两个排序的链表
- 剑指offer系列源码-合并两个排序的链表
- 剑指offer--合并两个排序的链表
- 剑指offer之合并两个排序的链表
- 剑指Offer之 - 合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 剑指Offer-合并两个排序的链表
- 剑指offer:合并两个排序的链表 代码实现
- 《剑指Offer》面试题:合并两个排序的链表
- 合并两个排序的链表(剑指offer)
- 如何在JSP页面中调用JS函数换body背景(亲测可用)
- Git smart checkout
- dubbo文档
- DotNet源码解读(一)Dictionary
- java类装载
- 剑指offer 17. 合并两个排序的链表
- butterknife的使用
- iOS HTTPS适配
- HDU- 1151 Air Raid(最小路径覆盖)
- 第三天 ado.net
- vim搜索设置高亮
- POJ 3628 Bookshelf 2
- ElasticSearch5.3的 head插件启动与关闭
- dubbox文档