前言:
目前大家对“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语言循环链表的建立