当前位置:   article > 正文

C语言笔记31 •单链表经典算法OJ题-3.反转链表•

C语言笔记31 •单链表经典算法OJ题-3.反转链表•

反转链表

1.问题

给你单链表的头节点 head,请你反转链表,并返回反转后的链表。

2.代码实现:

  1. //3.反转链表
  2. #define _CRT_SECURE_NO_WARNINGS 1
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <assert.h>
  6. typedef int SLTDataType;
  7. typedef struct SListnode
  8. {
  9. SLTDataType val;
  10. struct SListnode* next;
  11. }ListNode;
  12. ListNode* createNode(SLTDataType val)
  13. {
  14. ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
  15. if (newnode == NULL)
  16. {
  17. perror("malloc");
  18. exit(1);
  19. }
  20. newnode->val = val;
  21. newnode->next = NULL;
  22. return newnode;
  23. }
  24. struct ListNode* reverseList(struct ListNode* head)
  25. {
  26. if (head == NULL)
  27. {
  28. return head;
  29. }
  30. ListNode* n1,*n2,*n3 ;
  31. n1= NULL, n2=head, n3=n2->next;//创建三个节点
  32. while (n2)
  33. {
  34. n2->next = n1;// 指针逆向
  35. n1 = n2;
  36. n2 = n3;
  37. if (n3)
  38. {
  39. n3 = n3->next;
  40. }
  41. }
  42. return n1;
  43. }
  44. int main()
  45. {
  46. ListNode* node1, * node2, * node3, * node4, * node5;
  47. node1 = createNode(1);
  48. node2 = node1->next = createNode(2);
  49. node3 = node2->next = createNode(3);
  50. node4 = node3->next = createNode(4);
  51. node5 = node4->next = createNode(5);//创建一个链表
  52. ListNode* newhead = reverseList(node1);//反转链表
  53. while (newhead)
  54. {
  55. printf("%d ", newhead->val);
  56. newhead = newhead->next;
  57. }
  58. return 0;
  59. }

 

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

闽ICP备14008679号