#include<stdio.h>
#include<stdlib.h>
typedef struct List
{
int data;
struct List* next;
}list;
list* creatlist();
list* merge(list* head1, list* head2, list* head);
void printlist(list*);
int main()
{
struct list* head1, * head2, * head;
head1 = creatlist(); //第一个链表
head2 = creatlist(); //第二个链表
head = head1;
head = merge(head1, head2, head); //合并
printlist(head);
}
list* creatlist()
{
list* head;
list* p, * q;
int key;
head = (list*)malloc(sizeof(list));
if (!head)
{
printf("链表建立失败");
exit(0);
}
p = head;
head->next = NULL;
while (scanf_s("%d", &key))
{
if (!key)
break;
q = (list*)malloc(sizeof(list));
if (!q)
exit(0);
q->data = key;
q->next = NULL;
p->next = q;
p = q;
};
return head;
}
list* merge(list* head1, list* head2, list* head)
{
list* p, * q, * r;
head = head1;
r = head;
p = head1->next;
q = head2->next;
while (p && q)
{
if (p->data <= q->data)
{
r->next = p;
r = p;
p = p->next;
r->next = NULL;
}
else if (p->data > q->data)
{
r->next = q;
r = q;
q = q->next;
r->next = NULL;
}
}
if (p)
r->next = p;
else
r->next = q;
return head;
}
void printlist(list *head)
{
while (head->next != NULL)
{
printf("%d\t", head->next->data);
head = head->next;
}
}
自学之用,有错误,请指正
这里是什么错误呢–