您的位置:首页 > 理论基础 > 数据结构算法

数据结构练习1——链表合并

2015-10-28 22:22 465 查看
#include<stdio.h>
#include<malloc.h>
#pragma warning(disable:4996)
typedef struct node
{
int data;
struct node *link;
}LNode,*LinkList;

int main()
{
char c;
int num;//读取数字
LinkList list1, list2, p, q, r;
//建立两个链表
list1 = list2 = NULL;
c = '0';
r = (LinkList)malloc(sizeof(LNode));
while (c != '\n')
{
scanf("%d", &num);
scanf("%c", &c);//读取数字后的符号
p = (LinkList)malloc(sizeof(LNode));
p->data = num;
p->link = NULL;
if (list1 == NULL)
{
//链表为空
list1 = p;
r = p;
}
else
{
r->link = p;
r = p;
}
}
c = '0';
//读取第二个链表
while (c != '\n')
{
scanf("%d", &num);
scanf("%c", &c);//读取数字后的符号
p = (LinkList)malloc(sizeof(LNode));
p->data = num;
p->link = NULL;
if (list2 == NULL)
{
//链表为空
list2 = p;
r = p;
}
else
{
r->link = p;
r = p;
}
//这里注意链表的结尾
r->link = NULL;//后来发现其实不写这句也没关系 因为p->link 已经是链表的结尾了
}

//开始比较
p = (LinkList)malloc(sizeof(LNode));
q = (LinkList)malloc(sizeof(LNode));
p = list1;
q = list2;
while (p!= NULL&&q!= NULL)
{
if ((p->data) < (q->data))
{
printf("%d ", p->data);
p = p->link;
}
else if ((p->data) > (q->data))
{
printf("%d ", q->data);
q = q->link;
}
else
{
printf("%d ", p->data);
p = p->link;
q = q->link;
}
}
if ((p != NULL)||(q != NULL))
{
while (p!=NULL)
{
printf("%d ", p->data);
p = p->link;
}
while (q != NULL)
{
printf("%d ", q->data);
q = q->link;
}
}

printf("\n");
//释放

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: