Leetcode 21 Merge Two Sorted Lists 链表

合并两个已排序的链表,考到烂得不能再烂的经典题,但是很多人写这段代码会有这样或那样的问题

这里我给出了我的C++算法实现

 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 && !l2) return l1;
13         if(l2 && !l1) return l2;
14         if( !l2 && !l1) return NULL; //保证所有列表不为空
15         ListNode* t1 = l1;
16         ListNode* t2 = l2;
17         ListNode* t = NULL;
18         if(t1->val < t2->val){  //确定表头t是l1还是l2
19             t = t1;
20             t1 = t1->next;
21         }
22         else{
23             t = t2;
24             t2 = t2->next;
25         }
26         for(;t1&&t2; t = t->next){//确定表头t的下一个元素
27             if(t1->val < t2->val){
28                 t->next = t1;
29                 t1 = t1->next;
30             }
31             else{
32                 t->next = t2;
33                 t2 = t2->next;
34             }
35         }
36         if(t1){//t1不为空,将l1剩余部分插入到t后
37             t->next = t1;
38         }
39         if(t2){//t2不为空,将l2剩余部分插入到t后
40             t->next = t2;
41         }
42         if(l1->val < l2->val) return l1;
43         else return l2;//确定表头
44     }
45 };

 

posted @ 2016-03-01 16:36  Breeze0806  阅读(158)  评论(0编辑  收藏  举报