Re: [閒聊] 每日LeetCode
21. Merge Two Sorted List
融合兩個排序過的連結串列為一個新的連結串列後回傳。
Example 1:
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]
Input: list1 = [], list2 = []
Output: []
Input: list1 = [], list2 = [0]
Output: [0]
思路:
先確認list1跟list2裡面有沒有東西,前面先分成三種情況,只有兩者皆有東西
,才會進入迴圈。
迴圈內就比大小進行排序,假如list2大於等於1,n的下一個位子就放list1的值,
反之放list2的值。
之後n前進到下一個位子,直到出現list1或list2其中一者NULL或著兩者皆NULL,
迴圈才結束。
最後確認是否list1跟list2是否都為NULL,
假設一者非NULL,n的下個位子就放入剩餘的list1或list2的數值+指標。
C CODE
----------------------
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode*
list2){
struct ListNode* head = NULL;
if(list1 != NULL && list2 != NULL){
if((list1->val)<=(list2->val)){
head = list1;
list1= list1->next;
}else{
head = list2;
list2= list2->next;
}
}else if(list1 != NULL || list2 != NULL){
return (list1!=NULL)?list1:list2;
}else{
return NULL;
}
struct ListNode* n =head;
while(list1 != NULL && list2 != NULL){
if((list1->val)<=(list2->val)){
n->next = list1;
list1= list1->next;
}else{
n->next = list2;
list2= list2->next;
}
n = n->next;
}
n->next=(list1!=NULL)?list1:list2;
return head;
}
------------------------
補記:學到linked list的觀念,不過我不是很懂他跟array的差別。
兩者都資料+pointer,感覺差不多。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.91.103 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1672674196.A.780.html
推
01/02 23:44,
2年前
, 1F
01/02 23:44, 1F
→
01/02 23:46,
2年前
, 2F
01/02 23:46, 2F
→
01/02 23:47,
2年前
, 3F
01/02 23:47, 3F
推
01/02 23:48,
2年前
, 4F
01/02 23:48, 4F
感謝大師
推
01/02 23:49,
2年前
, 5F
01/02 23:49, 5F
感謝
→
01/02 23:51,
2年前
, 6F
01/02 23:51, 6F
→
01/02 23:51,
2年前
, 7F
01/02 23:51, 7F
OK
※ 編輯: sustainer123 (223.137.193.220 臺灣), 01/02/2023 23:53:49
推
01/03 15:05,
2年前
, 8F
01/03 15:05, 8F
討論串 (同標題文章)
完整討論串 (本文為第 174 之 719 篇):