LeetCode Merge Two Sorted Lists 归并排序

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
12         if(l1==0)    return l2;
13         if(l2==0)    return l1;
14         ListNode *start=0,*end=0;
15         if(l1->val<l2->val){
16             start=end=l1;
17             l1=l1->next;
18         }
19         else{
20             start=end=l2;
21             l2=l2->next;
22         }
23         while(l1!=0&&l2!=0){
24             if(l1->val<l2->val){
25                 end->next=l1;
26                 l1=l1->next;
27             }
28             else{
29                 end->next=l2;
30                 l2=l2->next;
31             }
32             end=end->next;
33         }
34         if(l1==0)
35             end->next=l2;
36         else
37             end->next=l1;
38         return start;   
39     }
40 };

题意:将两个已有序的链表归并为一个有序的链表,并返回。

思路:就不用递归!第一个值先比较大小,将start指向小的那个,作为最后的返回地址。li不断和l2比较,每比较一次就将一个结点归到end指针的后面,end也是从start开始的。最后一定会将两个链表串在一起,并有序。比喻:两个手分别拿着已有序的扑克牌,每次挑出手中最小的点数,放在桌子上,最后他们就从下到上有序地叠在一起了。那么一只手先放光了,那么就可以把剩余的牌直接放桌子上了。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。