反转链表

傷城~ 2023-06-05 05:55 17阅读 0赞

题目描述:输入一个链表,反转链表并输出。

思路:通常处理方法是将当前结点的next域指向其前一结点。

由于需要将当前结点的next域修改为前一结点,所以我们需要用一个指针PrevNode来记录前一结点。同时,因为修改了当前结点到的next结点后,便无法访问原来的next结点,因此需要一个NextNode指针来记录修改前的原来的next结点。

代码如下:

  1. #include <iostream>
  2. using namespace std;
  3. typedef struct ListNode
  4. {
  5. int data;
  6. ListNode* next;
  7. ListNode(int x) :data(x), next(NULL)
  8. {}
  9. }link;
  10. //打印链表
  11. void ShowList(link* head)
  12. {
  13. link* temp = head;
  14. while (temp)
  15. {
  16. cout << temp->data << " ";
  17. temp = temp->next;
  18. }
  19. cout << endl;
  20. }
  21. //反转链表
  22. link* ReverseList(link* head)
  23. {
  24. link* CurrNode = head;
  25. link* PrevNode = NULL;
  26. link* NextNode = NULL;
  27. while (CurrNode != NULL)
  28. {
  29. link* NextNode = CurrNode->next;
  30. CurrNode->next = PrevNode;
  31. PrevNode = CurrNode;
  32. CurrNode = NextNode;
  33. if (NextNode != NULL)
  34. {
  35. NextNode = NextNode->next;
  36. }
  37. }
  38. return PrevNode;
  39. }
  40. int main()
  41. {
  42. link head(1);
  43. link n1(2);
  44. link n2(3);
  45. link n3(4);
  46. link n4(5);
  47. link n5(6);
  48. head.next = &n1;
  49. n1.next = &n2;
  50. n2.next = &n3;
  51. n3.next = &n4;
  52. n4.next = &n5;
  53. ShowList(&head);
  54. unsigned int k = 3;
  55. link* temp = NULL;
  56. temp = ReverseList(&head);
  57. ShowList(temp);
  58. return 0;
  59. }

20191008153646812.png

发表评论

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

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

相关阅读

    相关

    题目 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出

    相关

    时间限制:1秒 空间限制:32768K 热度指数:408664 本题知识点: 链表 算法知识视频讲解 题目描述 输入一个链表,反转链表后,输出新链表的表头。