题目描述
题目链接: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;
}
这个题就解决了: