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

 

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

解题思路

两种解法:递归和非递归

这个题目就是归并排序中的归并操作,将两个有序数组(链表)合并为一个有序的数组。

非递归:

第一个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 }

 

posted @ 2019-09-15 00:13  西红市菜鸡  阅读(241)  评论(0编辑  收藏  举报