//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语言)
最新推荐文章于 2024-07-16 10:12:41 发布