链表:合并两个有序的链表
2020-04-05 18:25
344 查看
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
两种解法:递归和非递归
这个题目就是归并排序中的归并操作,将两个有序数组(链表)合并为一个有序的数组。
非递归:
第一个while循环,将 l1 和 l2 进行比较,谁小谁就合并到 listNode,直到 l1 或者 l2 为空
第二个while循环和第三个while循环,将 l1 或者 l2 剩下的节点合并到 listNode
最后返回的是 firstNode.next //头节点是不需要的
参考代码
递归:运行时间:27ms 占用内存:9564k
1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode Merge(ListNode list1,ListNode list2) { 12 if(list1 == null) { 13 return list2; 14 } 15 if(list2 == null) { 16 return list1; 17 } 18 ListNode head = null; 19 if(list1.val < list2.val) { 20 head = list1; 21 head.next = Merge(list1.next, list2); 22 } else { 23 head = list2; 24 head.next = Merge(list1, list2.next); 25 } 26 return head; 27 } 28 }
非递归:运行时间:26ms 占用内存:9544k
1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode Merge(ListNode l1, ListNode l2) { 12 ListNode listNode = new ListNode(0); 13 ListNode firstNode = listNode; 14 while (l1 != null && l2 != null) { //将 l1 和 l2 进行比较,谁小谁就合并到 listNode,直到 l1 或者 l2 为空 15 if (l1.val <= l2.val) { 16 listNode.next = l1; 17 l1 = l1.next; 18 } else { 19 listNode.next = l2; 20 l2 = l2.next; 21 } 22 listNode = listNode.next; 23 } 24 while (l1 != null) { //如果l2空了,就将剩余的l1加入到listNode中 25 listNode.next = l1; 26 l1 = l1.next; 27 listNode = listNode.next; 28 } 29 while (l2 != null) { //如果l1空了,就将剩余的l2加入到listNode中 30 listNode.next = l2; 31 l2 = l2.next; 32 listNode = listNode.next; 33 } 34 return firstNode.next; 35 } 36 }
转载于:https://www.cnblogs.com/carry6/p/11520868.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 合并两个有序链表
- leetcode python3 合并两个有序链表
- 两个有序链表的合并
- 两个有序链表的合并问题
- 合并两个有序递增的链表,使得合并后新链表还是有序的
- 九度1519题 合并两个有序链表java实现,(也是剑指offer中的题)
- LeetCode - 21. 合并两个有序链表
- 【每日刷题】 PAT 数据结构 02-线性结构1 两个有序链表序列的合并 (15 分)
- 合并两个有序的链表
- 合并两个有序链表
- C++合并两个有序的单链表
- 两个有序链表求差集,合并为一个有序链表
- 合并两个有序链表的递归与非递归
- 2-11. 两个有序链表序列的合并(15):链表数据结构基础练习
- 合并两个有序链表
- 合并两个排序的链表使之依然有序(不开辟新空间在原链表上操作的非递归版本)
- LeetCode 21 合并两个有序链表 C++ 解法学习 顺便复(xue)习链表
- [leetcode]Merge Two Sorted Lists合并两个有序链表
- Leetcode第21题 合并两个有序链表
- 7-51 两个有序链表序列的合并 (20 分)