剑指offer系列之十五:合并两个排序的链表
来源:互联网 发布:淘宝直播是镜像吗 编辑:程序博客网 时间:2024/04/30 00:54
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
这道题我的第一思路这样的:可以先遍历这两个排序的链表,把遍历的结果存放在一个集合中,然后调用库函数Arrays.sort方法完成排序,之后,根据这些排好序的结果重新创建一个链表,即为合并之后但仍然排序的链表。但是这种思路需要额外的List和创建链表的空间开销,而且时间复杂度最快也是
package com.rhwayfun.offer;public class MergeLinkedList { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode Merge(ListNode list1, ListNode list2) { if(list1 == null) return list2; if(list2 == null) return list1; ListNode mergeListHead = null; if(list1.val < list2.val){ mergeListHead = list1; mergeListHead.next = Merge(list1.next, list2); }else{ mergeListHead = list2; mergeListHead.next = Merge(list1, list2.next); } return mergeListHead; }}
上面的递归代码看起来很简洁,但是非递归代码也是需要掌握的,代码如下:
public ListNode Merge2(ListNode list1, ListNode list2) { if(list1 == null) return list2; if(list2 == null) return list1; ListNode mergeList = null; ListNode curNode = null; //初始化第一个节点 if(list1.val < list2.val){ curNode = list1; list1 = list1.next; curNode.next = null; mergeList = curNode; }else{ curNode = list2; list2 = list2.next; curNode.next = null; mergeList = curNode; } while(list1 != null && list2 != null){ if(list1.val < list2.val){ curNode = list1; list1 = list1.next; curNode.next = null; mergeList.next = curNode; mergeList = mergeList.next; }else{ curNode = list2; list2 = list2.next; curNode.next = null; mergeList.next = curNode; mergeList = mergeList.next; } } //处理剩余的结点 while(list1 != null){ curNode = list1; list1 = list1.next; curNode.next = null; mergeList.next = curNode; mergeList = mergeList.next; } while(list2 != null){ curNode = list2; list2 = list2.next; curNode.next = null; mergeList.next = curNode; mergeList = mergeList.next; } return mergeList; }
0 0
- 剑指offer(十五)之合并两个排序的链表
- 剑指offer之十五---合并两个排序的链表
- 剑指offer系列之十五:合并两个排序的链表
- 剑指offer系列源码-合并两个排序的链表
- 剑指Offer系列---(19)合并两个排序的链表
- 【剑指offer系列】 合并两个排序的链表___17
- 剑指offer系列-T17合并两个排序的链表
- 剑指Offer之合并两个排序的链表
- 剑指offer之合并两个排序的链表
- 剑指Offer之 - 合并两个排序的链表
- 剑指offer之合并两个排序的链表
- 剑指offer 之 合并两个排序的链表
- 剑指Offer系列-面试题17:合并两个排序的链表
- 剑指offer 17-合并两个排序表的链表
- 剑指offer:合并两个排序的链表
- 剑指offer:合并两个排序的链表
- 【剑指offer】Q17:合并两个排序的链表
- 剑指offer-17:合并两个排序的链表
- Category中的属性
- 第14周 项目3 - 是否二叉排序树?
- 第15周 项目2-哈希法组织关键字 线性探测法
- 第十四周项目1--验证算法(3)
- 第十五周项目3—B-树的基本操作
- 剑指offer系列之十五:合并两个排序的链表
- 用哈希法组织关键字
- C/C++语言中函数参数传递的三种方式
- android上传文件到服务器
- 15周—项目1—哈希表及其运算的实现
- 第15周【项目2 - 用哈希法组织关键字】
- 查找最近的点
- 欢迎使用CSDN-markdown编辑器
- 第14周项目2 二叉树排序树中查找的路径