啥都不要说了,做了半天
感天动地
#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 *createlist(){
struct ListNode *p,*head,*las;
head=p=(struct ListNode*)malloc(sizeof(struct ListNode));
while (1){
scanf("%d",&(p->data));
if (p->data==-1){
las->next=NULL;
return head;
}
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
las=p;
p=p->next;
}
}
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2){
struct ListNode *p,*head,*las;
if (!list1 && !list2) return NULL;
head=p=(struct ListNode*)malloc(sizeof(struct ListNode));
for (;list1;list1=list1->next){
for (;list2 && list2->data<list1->data;list2=list2->next){
p->data=list2->data;
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
las=p;
p=p->next;
}
p->data=list1->data;
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
las=p;
p=p->next;
}
for (;list2;list2=list2->next){
p->data=list2->data;
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
las=p;
p=p->next;
}
las->next=NULL;
//p=NULL不代表把上一个p的next改NULL,p是个指针,p=NULL只能让p指向NULL,已经创建的空间无法改变
return head;
}