标签:结点 线性表 next 链表 TwoLinkList while minp Nodet
1:设计一个算法用于判断带头结点的循环双链表是否对称
int judgebalance(pNode **head) { pNode *p,*q; p=*head->next;//指向下一个正序 q=*head->prev;//指向前一个逆序 /*我的思路 while(p->data==q->data)//对应的位置值相等 { p=p->next; q=q->next; if(p==q)//奇数个数指向同一地址 { printf("对称"); return 1; break; } else if(p->next==q&&q->prev==p)//偶数个数 { printf("对称"); return 1; break; } } return 0; */ //另一种书上的 while(p!=q&&p->next!=q->prev) { if(p->data==q->data) { p=p->next; q=q->prev; } else return 0; } return 1; }
2:有两个循环单链表,链表头指针针分别为h1和h2,编写一个函数将链表h2链接到链表h1之后,要求链接后的链表仍保持循环链表形式。
单链表定义
struct Nodet { int a; struct Nodet* next; }
正文
void mergeh(Nodet &h1,Nodel &h2) { Nodet *p,*q,*pp,*qq; p=pp=h1; q=qq=h2; while(p->next!=pp) { p=p->next; } p->next=q; while(q->next!=qq) { q=q->next; } q->next=p; }
3:设有一个带头结点的循环单链表,其结点值均为正整数、设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该节点从中删除。直到单链表空为止,再删除表头结点。
在不空时循环,每循环一次查找一个最小节点,,记录其前驱节点,删除改点
void de(Nodet &L) { Nodet *p,*pre,*minp,*minpre; while(L->next!=L)//表不空 循环 { p=L->next;pre=L; minp=p;minpre=pre; while(p!=L)//循环一趟,找最小值 { if(p->a<minp->a)//找到 { minp=p; minpre=pre; } pre=p;//找下个节点 p=p->next; } printf("%d",minp->a); minpre->next=minp->next; free(minp); } free(L); }
标签:结点,线性表,next,链表,TwoLinkList,while,minp,Nodet 来源: https://www.cnblogs.com/Y-flower/p/15502507.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。