龙空技术网

王道日常(c语言单链表,双链表,循环链表)

乒乓直达 258

前言:

目前大家对“c语言循环链表的建立”可能比较着重,大家都需要分析一些“c语言循环链表的建立”的相关知识。那么小编在网摘上收集了一些关于“c语言循环链表的建立””的相关知识,希望朋友们能喜欢,姐妹们快快来了解一下吧!

//P38 13(将两个单调递增的序列合并成一个单调递减的序列)LinkList merge_L(LinkList &A,LinkList &B){    //声明相关变量    LNode *la=A->next,*lb=B->next,*r;    //初始化A链表,断链    A->next=NULL;    //开始遍历(两个链表都不可以为空)    while(la && lb){        //比较        if(la->data<lb->data){            //保存地址            r=la->next;            //头插法            la->next=A->next;            A->next=la;            la=r;        }else{            r=lb->next;            lb->next=B->next;            B->next=lb;            lb=r;        }    }    //处理剩下的链表段    //无论谁剩下都将lb指向对应的地址    if(la){        lb=la;    }    //处理lb指向的地址    while(lb){        r=lb->next;        lb->next=A->next;        A->next=lb;        lb=r;    }    free(lb);    return A;}//王道 P38 14(从两个链表中找出公共元素,形成新的链表)LinkList create_c(LinkList &A,LinkList &B){    //创建一个c链表    LinkList C=(LNode*)malloc(sizeof(LNode));    C->next=NULL;    //尾插法设置尾端变量,还有两个辅助变量    LNode *r=C,*la=A->next,*lb=B->next;    //遍历两个链表    while(la && lb){        //判断两个链表的元素大小        if(la->data<lb->data){            la=la->next;        }else if(la->data>lb->data){            lb=lb->next;        }else{            LNode *s=(LNode *)malloc(sizeof(LNode));            s->data=la->data;            r->next=s;            r=s;            la=la->next;            lb=lb->next;        }    }    r->next=NULL;    return C;}//王道 P38 16(判断B是不是A的子序列)bool rank_L(LinkList A,LinkList B){    //两个辅助指针    LNode *pa=A->next,*pb=B->next;    //记录A地址指针    LNode *pre=A->next;    //循环    while(pa && pb){        //判断        if(pa->data==pb->data){            pa=pa->next;            pb=pb->next;        }else{            pa=pre->next;            pb=B->next;            pre=pre->next;        }    }    //如果pb为空则是子序列    if(pb==NULL){        return true;    }else{        return false;    }}

标签: #c语言循环链表的建立