链表的拼接:两个有序链表拼接成一个有序链表
这个指针p为什么只开辟了一次空间啊,不明白
struct ListNode mergelists(struct ListNode *listl, struct ListNode *list2) 复制
2
3 struct ListNode *head=NULL
4 struct ListNode *p=NULL
5 p=(struct ListNode*)malloc(sizeof(struct ListNode))//不懂
head=pi
8 while(list1!=NULL&&1ist2!=NULL)
9 if(list1->data<list2->data){
10 p->next=1ist1;
11 list1=list1->next;
12 p=p->next;
13 Telsef
14 p->next =1ist2;
5 list2=1ist2->next;
16 p=p->next;
7
18
19 if(list1!=NULL)p->next=list1;
20 if(list2!=NULL)p->next=list2
21 head=head->next;
22 return head:
23
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *createlist(); /*裁判实现,细节不表*/
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);
void printlist( struct ListNode *head )
{
struct ListNode *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
struct ListNode *list1, *list2;
list1 = createlist();
list2 = createlist();
list1 = mergelists(list1, list2);
printlist(list1);
return 0;
}
/* 你的代码将被嵌在这里 */
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2)
{
struct ListNode *head=NULL;
struct ListNode *p=NULL;
p = (struct ListNode*)malloc(sizeof(struct ListNode));//不懂
head =p;
while(list1!=NULL && list2!=NULL){
if(list1->data < list2->data){
p->next = list1;
list1= list1->next;
p = p->next;
}else{
p->next = list2;
list2= list2->next;
p = p->next;
}
}
if(list1!=NULL) p->next = list1;
if(list2!=NULL) p->next = list2;
head = head->next;
return head;
}