LeetCode:21_Merge Two Sorted Lists | 合並兩個排序列表 | Easy


題目:Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

簡單題,只要對兩個鏈表中的元素進行比較,然后移動即可,只要對鏈表的增刪操作熟悉,幾分鍾就可以寫出來,代碼如下:

 1 struct ListNode {
 2     int val;
 3     ListNode *next;
 4     ListNode(int x):val(x), next(NULL) {}
 5 };
 6 
 7 ListNode *GetLists(int n)    //得到一個列表
 8 {
 9     ListNode *l = new ListNode(0);
10     ListNode *pre = l;
11     int val;
12     for (int i = 0; i < n; i ++) {
13         cin >> val;
14         ListNode *newNode = new ListNode(val);
15         pre->next = newNode;
16         pre = pre->next;
17     }
18     return l->next;
19 }
20 
21 ListNode *mergeTwoLists(ListNode *l1, ListNode *l2)
22 {
23     assert (NULL != l1 && NULL != l2);
24     if (NULL == l1 && NULL == l2)
25         return NULL;
26     if (NULL == l1 && NULL != l2) // !!要記得處理一個為空,另一個不為空的情況
27         return l2;
28     if (NULL != l1 && NULL == l2)
29         return l1;
30     
31     ListNode *temp = new ListNode(0);
32     temp->next = l1;
33     ListNode *pre = temp;
34 
35     while(NULL != l1 && NULL != l2) {
36         if (l1->val > l2->val) { //從小到大排列
37             ListNode *next = l2->next;
38             l2->next = pre->next;
39             pre->next = l2;
40             l2 = next;
41         }        
42         else {
43             l1 = l1->next;
44         }
45         pre = pre->next;
46     }
47     if (NULL != l2) {
48         pre->next = l2;
49     }
50     return temp->next;
51 }

這其中要注意一點,即要記得處理一個鏈表為空,另一個不為空的情況,如{}, {0} -- > {0},當然上面的寫法多少啰嗦了一些,可以簡寫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM