当前位置:   article > 正文

XDOJ-264 反转链表_反转链表xdoj

反转链表xdoj

本题最主要的问题就是设计反转的算法,我为大家提供两种可行思路的代码,大家可以选择最适合自己的算法进行程序设计。

问题描述

输入一个链表,反转链表后,输出链表的所有元素。

输入说明

输入第一行为整数n(n>=1),代表测试链表数。

从第二行开始每行表示一个链表,其中第一个数据表示链表中数据个数,其余数据表示要测试的链表中的数据,均为整数。

输出说明

每一行对应一个链表反转后的元素。

输入样例

3

5 1 2 3 4 5

3 2 4 5

1 3

输出样例

5 4 3 2 1

5 4 2

3

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<malloc.h>
  4. using namespace std;
  5. typedef struct LinkList{
  6. int num;
  7. LinkList *next;
  8. }LinkList;
  9. LinkList* creatList(int cnt){
  10. LinkList* head, * s, *r;
  11. head=(LinkList*)malloc(sizeof(LinkList)); //生成头节点head
  12. r = head; //尾指针指向头节点
  13. for(int i=0; i<cnt;i++){
  14. s=(LinkList*)malloc(sizeof(LinkList)); //生成新节点*s
  15. cin>>s->num;
  16. r->next = s; //新节点插入表尾
  17. r = s; //尾指针指向新表尾
  18. }
  19. r->next = NULL;
  20. return head; //返回表头指针
  21. }
  22. void reversal(LinkList *L){
  23. LinkList *p = L->next;
  24. LinkList *r = p->next;
  25. //指针遍历
  26. while(p->next != NULL){
  27. p->next = r->next;
  28. r->next = L->next;
  29. L->next = r;
  30. r = p->next;
  31. }
  32. // LinkList *p = NULL
  33. // LinkList *cur = L;
  34. // while(cur) {
  35. // LinkList *r = cur->next;
  36. // //将cur头插到新链表
  37. // cur->next = p;
  38. // p = cur;
  39. // cur = r;
  40. // }
  41. }
  42. void print(LinkList *L){ //遍历整个链,输出结果
  43. LinkList *p;
  44. p = L;
  45. while(p!=NULL){
  46. if(p->next){
  47. cout<<p->next->num<<' ';
  48. }
  49. p = p->next;
  50. }
  51. }
  52. int main()
  53. {
  54. int i, j;
  55. int cnt = 0;
  56. cin>>j;
  57. LinkList *L[j];
  58. for(i=0;i<j;i++){ //利用循环进行创建链表
  59. cin>>cnt;
  60. L[i] = creatList(cnt);
  61. reversal(L[i]); //利用原来链表位置进行反转链表存储
  62. }
  63. for(i=0;i<j;i++)
  64. {
  65. print(L[i]);
  66. if(i!=j-1)
  67. cout<<'\n';
  68. }
  69. return 0;
  70. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号