056.单链表就地逆置

举报
C语言与CPP编程 发表于 2022/04/30 23:53:40 2022/04/30
【摘要】 #include<stdio.h>#include<stdlib.h>#define NULL 0 /*宏定义*/typedef struct node /*定义结点类型的数据结构*/{ char c; /*数据域,类型为字符型*/ struct node *next; /*指针域,类型为本结构体类型*/}Nod...

  
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define NULL 0 /*宏定义*/
  4. typedef struct node /*定义结点类型的数据结构*/
  5. {
  6. char c; /*数据域,类型为字符型*/
  7. struct node *next; /*指针域,类型为本结构体类型*/
  8. }Node,*L; /*类型重定义,即Node和*L和struct node等价*/
  9. main()
  10. {
  11. L l,p,q,r; /*用指针类型定义三个结点类型的指针*/
  12. char ch;
  13. l=(L)malloc(sizeof(Node)); /*分配内存空间*/
  14. l->c='\0'; /*为头结点的数据域赋值,值为空*/
  15. l->next=NULL; /*指明下一个结点目前不存在*/
  16. q=l; /*q为游动指针,链表结点的连结要用*/
  17. printf("Input a character:\n");
  18. scanf("%c",&ch);
  19. getchar();
  20. while(ch!='0') /*输入0表示输入结束*/
  21. {
  22. p=(L)malloc(sizeof(Node)); /*为新输入的数据分配内存空间*/
  23. p->c=ch;
  24. p->next=NULL; /*新输入的结点在链表的最后,即它的后面没有其它元素*/
  25. q->next=p; /*q用于将上一个元素链接至当前新元素*/
  26. q=p; /*q自己移到当前最后一个元素,以备继续链接所用*/
  27. scanf("%c",&ch);
  28. getchar();
  29. }
  30. /*以上完成了单链表的创建*/
  31. q=l->next;
  32. p=q->next;
  33. r=p->next;
  34. q->next=NULL;
  35. while(r!=NULL)
  36. {
  37. p->next=q;
  38. q=p;
  39. p=r;
  40. if(r->next!=NULL) /*r后面还有结点,则逆置继续*/
  41. r=r->next;
  42. else
  43. break;
  44. }
  45. r->next=q;
  46. l->next=r; //头结点指向最后一个结点
  47. q=l; /*输入整个链表前,先将q移到链表头,l一般不动*/
  48. while(q->next!=NULL) /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/
  49. {
  50. printf("%c-->",q->next->c); /*q->next->c表示q所指向的下一个元素的数据*/
  51. q=q->next; /*完成该元素的输出后,q移至下一个元素重复输出操作*/
  52. }
  53. printf("\n");
  54. }

文章来源: blog.csdn.net,作者:程序员编程指南,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/124495063

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。