有序单链表的合并
#include <stdio.h>
#include "stdlib.h"
typedef struct node
{
int data;
struct node *next;
}node;
struct node *create()
{
int i =0;
struct node *head, *p, *q;
int x = 0;
head = (struct node *)malloc(sizeof(struct node));
while(1)
{
printf("Please input the data:");
scanf("%d" , &x);
printf("%d\n",x);
if(x == 0)
break;
p =(struct node *)malloc(sizeof(struct node));
p->data = x;
if(++i == 1)
{
head->next = p;
}
else
{
q->next = p;
}
q = p;
}
q->next = NULL;
return head;
}
struct node *MergeRecursive(struct node *head1,struct node *head2)
{
struct node *head = NULL;
if(head1 == NULL)
{
return head2;
}
if(head2 == NULL)
{
return head1;
}
if(head1->data < head2->data)
{
head = head1;
head->next = MergeRecursive(head1->next,head2);
}
else
{
head = head2;
head->next = MergeRecursive(head1,head2->next);
}
return head;
}
void print(struct node *head)
{
struct node *p;
int index = 0;
if(head->next == NULL)
{
printf("Link is empty!\n");
return ;
}
p = head->next ;
while(p != NULL )
{
printf("the %dth node is :%d\n",++index,p->data);
p = p->next;
}
}
int main()
{
/* 我的第一个 C 程序 */
struct node *head1 = create();
struct node *head2 = create();
struct node *head = MergeRecursive(head1,head2);
print(head);
return 0;
}
Please input the data:1
Please input the data:4
Please input the data:6
Please input the data:8
Please input the data:0
Please input the data:3
Please input the data:6
Please input the data:7
Please input the data:8
Please input the data:9
Please input the data:0
the 1th node is :0
the 2th node is :1
the 3th node is :3
the 4th node is :4
the 5th node is :6
the 6th node is :6
the 7th node is :7
the 8th node is :8
the 9th node is :8
the 10th node is :9
注意一点:
在菜鸟工具中scanf的使用方法:
scanf输入元素必须用空格分隔开来。