答案:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* p,*l,*head;
p=(struct ListNode*)malloc(sizeof(struct ListNode));
head=p;
if(l1!=NULL||l2!=NULL){
p->val=0;
p->next=NULL;}
else
return NULL;
while(l1!=NULL&&l2!=NULL)
{
l=(struct ListNode*)malloc(sizeof(struct ListNode));
l->val=0;
l->next=NULL;
if(l1->val<=l2->val)
{
p->val=l1->val;
l1=l1->next;
if(l1==NULL&&l2==NULL)
break;
p->next=l;
p=p->next;
}
else //(l1->val>l2->val)
{
p->val=l2->val;
l2=l2->next;
if(l1==NULL&&l2==NULL)
break;
p->next=l;
p=p->next;
}
}
while(l1!=NULL)
{
l=(struct ListNode*)malloc(sizeof(struct ListNode));
l->val=0;
l->next=NULL;
p->val=l1->val;
l1=l1->next;
if(l1==NULL)
break;
p->next=l;
p=p->next;
}
while(l2!=NULL)
{
l=(struct ListNode*)malloc(sizeof(struct ListNode));
l->val=0;
l->next=NULL;
p->val=l2->val;
l2=l2->next;
if(l2==NULL)
break;
p->next=l;
p=p->next;
}
return head;
}
main函数:
int main()
{
struct ListNode *p1,*p2,*head1,*head2,*l,*q;
p1=(struct ListNode*)malloc(sizeof(struct ListNode*));
p2=(struct ListNode*)malloc(sizeof(struct ListNode*));
head1=p1;
head2=p2;
p1->val=0;
p1->next=NULL;
p2->val=0;
p2->next=NULL;
do
{
scanf("%d",&p1->val);
l=(struct ListNode*)malloc(sizeof(struct ListNode*));
l->val=0;
l->next=NULL;
p1->next=l;
p1=p1->next;
}while(getchar()!='\n');
do
{
scanf("%d",&p2->val);
l=(struct ListNode*)malloc(sizeof(struct ListNode*));
l->val=0;
l->next=NULL;
p2->next=l;
p2=p2->next;
}while(getchar()!='\n');
q=mergeTwoLists(head1,head2);
while(q->next!=NULL)
{
printf("%d",q->val);
q=q->next;
}
return 0;
}
提交过程中遇到的问题:
一、两个空链表
1、直接返回NULL
2、如果l1空,返回l2;如果l2空,返回l1
3、if判断,还是返回新链表(我弄不清楚)
二、自己的main函数和题给的main函数测试结果不一致
判断p->nextNULL 还是 pNULL 的区别
三、末尾多零
在p->next=l;p=p->next;前做判断