将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
**思路:定义一个头尾指针置为NULL while循环依次比较两个链表的值的大小 遍历链表 比较完数值大小过后连接到tail的尾部 然后各自的链表的节点的next指针指向下一个结点的地址
/**
* 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;
}
else if(list2==NULL)
{
return list1;
}
//定义一个head和tail
//head和tail最初都置为NULL
//tail=tail->next
//尾部插入
struct ListNode*head=NULL;
struct ListNode*tail=NULL;
while(list1&&list2)
{
//取小的尾部插入
if(list1->val<list2->val)
{
if(tail==NULL)
{
head=tail=list1;
//tail=tail->next;
}
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;
}
else if(list2)
{
tail->next=list2;
}
return head;
}