题目:
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个已经排好序的链。新的链应该是合并两个链。(那么意思是不可以申请新空间)
第一次没看清题,申请了新的空间,当然也可以提交通过,就是时间长
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
//当其中一个链是NULL,那么返回另一个链(不管空或不空),即为合并后的链
if( l1==NULL )
return l2;
if(l2==NULL)
return l1;
struct ListNode * i1,*i2;
i1=l1;
i2=l2;
struct ListNode * head,*tail,*tem;
if(i1->val < i2->val)
{
head =(struct ListNode *)malloc(sizeof(struct ListNode));
head->val = i1->val;
head->next=NULL;
i1=i1->next;
}
else
{
head =(struct ListNode *)malloc(sizeof(struct ListNode));
head->val = i2->val;
head->next=NULL;
i2=i2->next;
}
tail=head;
while( i1!=NULL && i2!=NULL)
{
if(i1->val < i2->val)
{
tem =(struct ListNode *)malloc(sizeof(struct ListNode));
tem->val = i1->val;
tem->next=NULL;
tail->next=tem;
tail=tail->next;
i1=i1->next;
}
else
{
tem =(struct ListNode *)malloc(sizeof(struct ListNode));
tem->val = i2->val;
tem->next=NULL;
i2=i2->next;
tail->next=tem;
tail=tail->next;
}
}
if(i1==NULL)
tail->next=i2;
else
tail->next=i1;
return head;
}
修改了之后,没有申请空间,直接利用原链表
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
//当其中一个链是NULL,那么返回另一个链(不管空或不空),即为合并后的链
if( l1==NULL )
return l2;
if(l2==NULL)
return l1;
struct ListNode * i1,*i2,*head,*tail;
i1=l1;
i2=l2;
if(i1->val < i2->val)
{
head =i1;
i1=i1->next;
}
else
{
head =i2;
i2=i2->next;
}
tail=head;
while( i1!=NULL && i2!=NULL)
{
if(i1->val < i2->val)
{
tail->next=i1;
tail=tail->next;
i1=i1->next;
}
else
{
tail->next=i2;
tail=tail->next;
i2=i2->next;
}
}
if(i1==NULL)
tail->next=i2;
else
tail->next=i1;
return head;
}