数据结构 单链表的就地转置

举报
悦来客栈的老板 发表于 2020/12/30 00:54:01 2020/12/30
【摘要】 #include <stdio.h>#include <stdlib.h>#include <iostream.h> #define OVERFLOW -2 typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkL...

  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <iostream.h>
  4. #define OVERFLOW -2
  5. typedef int ElemType;
  6. typedef struct LNode
  7. {
  8. ElemType data;
  9. struct LNode *next;
  10. }LNode, *LinkList;
  11. void CreateList_L(LinkList &L, int n)
  12. {
  13. int i;
  14. LinkList p,q;
  15. L = (LinkList) malloc (sizeof(LNode));
  16. if (!L)
  17. {
  18. exit(OVERFLOW);
  19. }
  20. p = L;
  21. for (i=0; i<n; i++)
  22. {
  23. q = (LinkList) malloc (sizeof(LNode));
  24. if (!q)
  25. {
  26. exit(OVERFLOW);
  27. }
  28. scanf("%d",&q->data);
  29. p->next = q;
  30. p = q;
  31. }
  32. p->next = NULL;
  33. }
  34. void Display(LinkList L)
  35. {
  36. LinkList p = L->next;
  37. while (p != NULL)
  38. {
  39. printf("%d ",p->data);
  40. p = p->next;
  41. }
  42. printf("\n");
  43. }
  44. void reverseList(LinkList &L)
  45. {/*单链表的就地转置,L->1->2->3->4->5->NULL变成L->5->4->3->3->1->NULL
  46. 设置两个指针p,q,p = L->next, q = L->next,q = q->next,将第一个元素的后继变为空 p->next = NULL,然后p = q;
  47. */
  48. LinkList p = L->next,q = L->next;
  49. q = q->next;//q指向第二个元素
  50. p->next = NULL;//第一个元素变成最后一个元素
  51. p = q;//处理后面的元素
  52. while (p != NULL)
  53. {
  54. q = q->next;
  55. p->next = L->next;
  56. L->next = p;
  57. p = q;
  58. }
  59. }
  60. int main()
  61. {
  62. int n;
  63. LinkList L;
  64. printf("请输入您要创建单链表的元素的个数:");
  65. scanf("%d",&n);
  66. CreateList_L(L,n);
  67. Display(L);
  68. reverseList(L);
  69. Display(L);
  70. return 0;
  71. }

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/17248965

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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