解答思路:用归并的思想,将两个链表的第一个值相比较,小的放入新创建的链表,然后向后遍历链表,重复上述操作,直到其中一个链遍历完成后,将新的链表连接在另一个链表上。
代码实现:
/**
* 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 list;
//struct ListNode* s=&list;
//后面返回时就要用return list.next;
struct ListNode* list=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* s=list;
while(list1!=NULL&&list2!=NULL)
{//比较然后跟新创建的链表连接起来
if(list1->val<list2->val)
{
s->next=list1;
list1=list1->next;
}
else
{
s->next=list2;
list2=list2->next;
}
s=s->next;
}
//连接没有遍历完成的链表
if(list1==NULL&&list2!=NULL)
{
s->next=list2;
}
else if(list1!=NULL&&list2==NULL)
{
s->next=list1;
}
return list->next;
}