題目描述
題目鏈接:21. 合并兩個有序鏈表 - 力扣(LeetCode)
題目分析
這個算法思路很簡單:就是直接找小尾插
定義一個tail和head,對比兩個鏈表結點的val,小的尾插到tail->next,如果一個鏈表先走完,就把另外一個鏈表尾插到tail->next,最后返回head就行
具體的流程就是:
有一個特殊情況就是:如果list1和list2有一個為空的話,那就直接返回另外一個鏈表
代碼示例
有了思路,我們就可以寫代碼了:
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {if(list1==NULL)return list2;if(list2==NULL)return list1;struct ListNode*tail=NULL,*head=NULL;while(list1&&list2){if(list1->val<list2->val){if(tail==NULL)head=tail=list1;else{tail->next=list1;tail=tail->next;}list1=list1->next;}else{if(tail==NULL)head=tail=list2;else{tail->next=list2;tail=tail->next;}list2=list2->next;}}if(list1)tail->next=list1;if(list2)tail->next=list2;return head;
}
這個題就解決了: