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