您的位置:首页 > 其它

链表:合并两个有序的链表

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
diexi0099 发布了0 篇原创文章 · 获赞 0 · 访问量 283 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: