当前位置:   article > 正文

6-4【李春葆教材 带头结点的循环双向链表】(必做) 判断链表结点对称

6-4【李春葆教材 带头结点的循环双向链表】(必做) 判断链表结点对称

设计算法,判断带头结点的循环双向链表中的数据结点是否对称。
如果对称,输出“yes”
如果不对称,输出“no”
链表空则输出“NULL”

输入样例:

在这里给出一组输入。例如:

abcxba

输出样例:

在这里给出相应的输出。例如:

  1. a b c x b a
  2. no

此题的运行案例有问题,案例后必须加上回车

链表结构及操作函数接口定义:

  1. typedef char ElemType;
  2. typedef struct DNode //定义循环双链表结点类型
  3. {
  4. ElemType data;
  5. struct DNode *prior,*next;
  6. } DLinkNode;
  7. void InitList(DLinkNode *&L); //初始化一个空的带头节点的双向循环链表 裁判程序实现,略去不表
  8. void DestroyList(DLinkNode *&L); // 销毁链表 裁判程序实现,略去不表
  9. bool ListInsert(DLinkNode *&L,int i,ElemType e); // 在链表第i个节点处插入元素为e的节点 。裁判程序实现,略去不表。
  10. void DispList(DLinkNode *L); // 正向顺序输出链表,输出时每个节点元素之间以空格符间隔,以换行符结束。
  11. int Symm(DLinkNode *L); // 判断链表是否对称,对称时返回1,不对称时返回0,链表为空时返回-1

裁判测试程序样例: 

  1. #include <stdio.h>
  2. void InitList(DLinkNode *&L); //裁判程序实现,略去不表
  3. void DestroyList(DLinkNode *&L); //裁判程序实现,略去不表
  4. bool ListInsert(DLinkNode *&L,int i,ElemType e);//裁判程序实现,略去不表
  5. //要求写出以下函数实现
  6. void DispList(DLinkNode *L);
  7. int Symm(DLinkNode *L);
  8. int main()
  9. {
  10. DLinkNode *h;
  11. ElemType e;
  12. InitList(h);
  13. int i=1;
  14. char ch;
  15. while((ch=getchar())!='\n')
  16. {
  17. ListInsert(h,i,ch);
  18. i++;
  19. }
  20. DispList(h);
  21. if(Symm(h)==1)
  22. printf("yes\n");
  23. else if (Symm(h)==0)printf("no\n");
  24. else printf("NULL\n");
  25. DestroyList(h);
  26. return 0;
  27. }
  28. /* 请在这里填写答案 */

输出函数要注意就算是空也要输出换行

从头节点出发开始判断,两个指针一个指向头节点,一个指向尾节点

一个向前走一个向后走 

  1. void DispList(DLinkNode *L)
  2. {
  3. if(L->next==L&&L->prior==L){
  4. printf("\n");
  5. return;
  6. }else{
  7. DLinkNode *p=L->next;
  8. while(p!=L){
  9. printf("%c ",p->data);
  10. p=p->next;
  11. }
  12. }
  13. printf("\n");
  14. }
  15. int Symm(DLinkNode *L)
  16. {
  17. if(L->next==L->prior&&L->next==L){
  18. return -1;
  19. }DLinkNode *head,*tail;
  20. head=L->next;
  21. tail=L->prior;
  22. while(head!=tail){
  23. if(head->data!=tail->data){
  24. return 0;
  25. }
  26. head=head->next;
  27. tail=tail->prior;
  28. }
  29. return 1;
  30. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/593764
推荐阅读
相关标签
  

闽ICP备14008679号