题目:
思路:因为题目示例中没有头结点,创建头指针确定头结点,创建尾指针处理比较后剩余的单一链表,分别遍历两个链表,并用循环逐一比较。
/**
* 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* head=NULL;//合并链条的头指针
struct ListNode*tail=NULL;//合并链条的尾指针
//确定头结点
if(list1->val<=list2->val){
head=list1;
tail=list1;
list1=list1->next;
}else{
head=list2;
tail=list2;
list2=list2->next;
}
//循环遍历两个链表
while(list1!=NULL&&list2!=NULL)
{
if(list1->val<=list2->val){
tail->next=list1;
tail=list1;
list1=list1->next;
}
else
{
tail->next=list2;
tail=list2;
list2=list2->next;
}
}
//剩余的链表加到合并链表尾部
if(list1!=NULL){
tail->next=list1;
}else{
tail->next=list2;
}
return head;
}