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.就兩個排序過的list 重新再組合
一開始有想過是不是可以用recursive
但是懶得去想
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { if(l1==NULL)return l2; if(l2==NULL)return l1; struct ListNode* l1temp = l1; struct ListNode* l2temp = l2; while(l1temp != NULL && l2temp != NULL){ if( l1temp->val >=l2temp->val){ while(l2temp->next!=NULL){ if( l2temp->next->val > l1temp->val){ break; }else{ l2temp=l2temp->next; } } struct ListNode* temp2=l2temp->next; l2temp->next = l1temp; l2temp = temp2; }else{ while(l1temp->next!=NULL){ if( l1temp->next->val > l2temp->val){ break; }else{ l1temp=l1temp->next; } } struct ListNode* temp=l1temp->next; l1temp->next = l2temp; l1temp=temp; } } return (l1->val >= l2->val)? l2:l1; } |
------------------------
recursive version
每次都跟自己比較
比較小的就去recursive 找 下一個可以比對方大的數字
這樣每次recursive 都會return最小值
1 2 3 4 5 6 7 8 9 10 11 12 13 | struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { if (l1 == NULL) return l2; if (l2 == NULL) return l1; if (l1->val <= l2->val) { l1->next = mergeTwoLists(l1->next, l2); return l1; } else { l2->next = mergeTwoLists(l1, l2->next); return l2; } } |
沒有留言:
張貼留言