数据结构之俩循环单链表合并

这段时间要好好调整一下自己了,发现基础才是王道,所以打算好好铺一铺我滴c指针这一块了,所以数据结构将会断更一段时间,不过接下来要和大家见面的就是我们上次的循环单链表之合并
题目:将链表a和链表b合并为链表c

算法思想
将a链表的尾指针reara与b链表的第一个节点链接起来,并且修改b链表的尾指针rearb,使得它指向链表a的头结点

代码

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
    int data;
    struct node*next;
}node,*list;
list L_list()
{
    list llist;
    int num;
    node*p;
    llist=(node*)malloc(sizeof(struct node));
    llist->data=-1;
    llist->next=llist;
    puts("input value -1 over");
    scanf("%d",&num);
    while(num!=-1)
    {
        p=(node*)malloc(sizeof(struct node));
        p->data=num;
        p->next=llist->next;
        llist->next=p;
        scanf("%d",&num);
     } 
     p=llist;
     while(p->next!=llist)
     {
        p=p->next;
     }
     return p;
}
list merge(list reara,list rearb)
{
    node *p;
    p=reara->next;
    reara->next=rearb->next->next;
    free(rearb->next);
    rearb->next=p;
    return rearb;
}
void print(list cl)
{
    node*p;
    p=cl->next->next;
    while(p!=cl->next)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    }
int main()
{
    list clista,clistb,clistc;
    printf("input clista:\n");
    clista=L_list();
    puts("the clista:");
    print(clista);
    printf("input clistb:\n");
    clistb=L_list();
    puts("the clistb:");
    print(clistb);
    clistc=merge(clista,clistb);
    puts("the merge:\n");
    print(clistc);
    return 0;
}

总结

这一次的代码主要精髓在于如何处理两个链表合并后的关系,所以这一次的难题就是这里了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值