将双链表中值为x的节点置为首节点

朴灿烈づ我的快乐病毒、 2022-07-27 14:34 198阅读 0赞

问题及代码:

  1. /*
  2. *Copyright (c)2016,烟台大学计算机与控制工程学院
  3. *All rights reserved.
  4. *文件名称:table.cpp
  5. *作 者:单昕昕
  6. *完成日期:2016年3月23日
  7. *版 本 号:v1.0
  8. *
  9. *问题描述:将双链表中值为x的节点置为首节点。
  10. *程序输入:无。
  11. *程序输出:双链表。
  12. */
  13. #include <iostream>
  14. #include <malloc.h>
  15. using namespace std;
  16. typedef struct DNode
  17. {
  18. int data;
  19. int freq;
  20. struct DNode *next;
  21. struct DNode *prior;
  22. } DinkList;
  23. void LocateNode(DinkList *&h,int x)
  24. {
  25. DinkList *p,*q;
  26. p=h->next;
  27. int i=0,j=0;
  28. //查找x所在的位置
  29. while(p!=NULL&&p->data!=x)
  30. {
  31. p=p->next;
  32. ++i;
  33. }
  34. //删除x节点
  35. p=h;
  36. while(j<=i-1&&p!=NULL)
  37. {
  38. ++j;
  39. p=p->next;
  40. }
  41. q=p->next;///q=p+1
  42. p->next=q->next;
  43. if(p->next!=NULL)
  44. p->next->prior=p;
  45. //x插入到头结点位置
  46. //cout<<p->data<<endl;//4
  47. //cout<<q->data<<endl;//3
  48. //cout<<h->next->data<<endl;//9
  49. q->next=h->next;
  50. if(h->next!=NULL)
  51. h->next->prior=q;
  52. //cout<<h->next->prior->data<<endl;//3
  53. q->prior=h;
  54. h->next=q;
  55. }
  56. int main()
  57. {
  58. DinkList *h,*s;
  59. h=(DinkList *)malloc(sizeof(DinkList));
  60. int a[10];
  61. int i;
  62. for(i=0; i<10; ++i)//初始化a数组
  63. a[i]=i;
  64. h->prior=h->next=NULL;
  65. for(i=0; i<10; ++i)//头插法
  66. {
  67. s=(DinkList *)malloc(sizeof(DinkList));
  68. s->data=a[i];
  69. s->next=h->next;
  70. if(h->next!=NULL)
  71. h->next->prior=s;
  72. h->next=s;
  73. s->prior=h;
  74. }
  75. cout<<"原来:";//输出链表
  76. DinkList *p;
  77. p=h->next;
  78. while(p!=NULL)
  79. {
  80. cout<<p->data<<" ";
  81. p=p->next;
  82. }
  83. cout<<endl;
  84. int x;
  85. cout<<"x=";
  86. cin>>x;
  87. LocateNode(h,x);//移动x
  88. cout<<"移动值为"<<x<<"的节点:";
  89. p=h->next;//输出链表
  90. while(p!=NULL)
  91. {
  92. cout<<p->data<<" ";
  93. p=p->next;
  94. }
  95. cout<<endl;
  96. return 0;
  97. }

运行结果:

Center

先遍历,找到x节点的位置,再从这个位置删除,最后把这个节点插入到头节点处。

发表评论

表情:
评论列表 (有 0 条评论,198人围观)

还没有评论,来说两句吧...

相关阅读