一.题目
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
二.代码(C)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
if (!l1)
{
return l2;
}
else if (!l2)
{
return l1;
}
struct ListNode* L; //= (struct ListNode*)malloc(7*sizeof(struct ListNode*));
struct ListNode* head;
struct ListNode* temp1=l1->next;
struct ListNode* temp2=l2->next;
if (l1->val>=l2->val)
{
head = l2;
L = l2;
l2 = temp2;
}
else
{
head = l1;
L = l1;
l1 = temp1;
}
while(l1!=NULL&&l2!=NULL)
{
temp1 = l1->next;
temp2 = l2->next;
if (l1->val>=l2->val)
{
L->next = l2;
L = l2;
l2 = temp2;
}
else
{
L->next = l1;
L = l1;
l1 = temp1;
}
}
if (l1==NULL&&l2!=NULL)
{
L->next=l2;
}
else if (l2==NULL&&l1!=NULL)
{
L->next=l1;
}
return head;
}
三.提交记录
四.备注
C语言中对于链表的调用一般采用指针的方式,此时要注意提前保存原链表的下一项,同时不使用额外的内存建立新的链表,而是合并两个原链表,返回头地址。