您的位置:首页 > 其它

将循环链表插在单链表头部

2015-09-28 00:47 309 查看
#include<stdio.h>
#include<stdlib.h>
typedef struct link_list
{
int info;
struct link_list *next;
}node;
node *init()
{
return NULL;
}
node *create_headlink()  //创建循环链表
{
int x;
node *head=(node *)malloc(sizeof(node));
node *q,*p=head;
scanf("%d",&x);
if(x!=-1) head->info=x;
else return NULL;
while(scanf("%d",&x)&&x!=-1)
{
q=(node *)malloc(sizeof(node));
q->info=x;
p->next=q;
p=p->next;
}
p->next=head;
return head;
}
node *create_link() //创建无头节点的单链表
{
int x;
node *head,*tail,*q;
head=(node*)malloc(sizeof(node));
tail=head;
scanf("%d",&x);
if(x!=-1) head->info=x;
else return NULL;
while(scanf("%d",&x)&&x!=-1)
{
q=(node *)malloc(sizeof(node));
q->info=x;
tail->next=q;
tail=tail->next;
}
tail->next=NULL;
return head;
}
void display(node *head) //打印无头节点的链表
{
node *p=head;
if(!head)
{
printf("链表是空的\n");
}else
{
while(p)
{
printf("%-5d",p->info);
p=p->next;
}
}
printf("\n");
}
void display2(node *head)//打印循环链表
{
node *p=head;
if(!head)
{
printf("链表是空的\n");
}else
{
printf("%-5d",head->info);
p=head->next;
while(p!=head)
{
printf("%-5d",p->info);
p=p->next;
}
}
printf("\n");
}
node *find_rear(node *head)  //循环链表找尾指针
{
node *p=head;
if(!head) return NULL;
while(p->next!=head) p=p->next;
return p;
}
node *insert_linklist(node *head1,node *head2) //将循环链表插在单链表前面
{
node *rear;
rear=find_rear(head1); //找到循环链表尾指针
rear->next=head2;  //使尾指针指向单链表的头指针
return head1;
}
int main()
{
node *head1,*head2;
head1=create_headlink();
printf("循环链表:\n");
display2(head1);
head2=create_link();
printf("不带头结点的单链表:\n");
display(head2);
insert_linklist(head1,head2);
printf("合并后的单链表:\n");
display(head1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: