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

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值