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

来源:互联网 发布:ubuntu引导分区大小 编辑:程序博客网 时间:2024/06/06 10:47

这段时间要好好调整一下自己了,发现基础才是王道,所以打算好好铺一铺我滴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;}

总结

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

1 0
原创粉丝点击