当前位置:   article > 正文

【c语言篇】每日一题-pta-实验11-2-9 链表逆置

【c语言篇】每日一题-pta-实验11-2-9 链表逆置

题目如下:

裁判测试程序样例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct ListNode {
  4. int data;
  5. struct ListNode *next;
  6. };
  7. struct ListNode *createlist(); /*裁判实现,细节不表*/
  8. struct ListNode *reverse( struct ListNode *head );
  9. void printlist( struct ListNode *head )
  10. {
  11. struct ListNode *p = head;
  12. while (p) {
  13. printf("%d ", p->data);
  14. p = p->next;
  15. }
  16. printf("\n");
  17. }
  18. int main()
  19. {
  20. struct ListNode *head;
  21. head = createlist();
  22. head = reverse(head);
  23. printlist(head);
  24. return 0;
  25. }
  26. /* 你的代码将被嵌在这里 */

 

 代码如下:

  1. struct ListNode *reverse(struct ListNode *head) {
  2. if(!head || !head->next) { // 检查给定链表是否为空或仅有一个元素
  3. return head;
  4. }
  5. struct ListNode *prev = NULL, *current = head, *next;
  6. // 沿着链表遍历,将每个节点翻转,使其指向原本的前一个节点
  7. while(current) {
  8. next = current->next;//将current的下一个结点保存起来,为了在修改current->next指针后仍能找到链表的下一个结点
  9. current->next = prev;//指向其前面的指针,在这步完成了链表的逆置
  10. prev = current;//更新prev和current
  11. current = next;
  12. }
  13. //循环结束后,current变为NULL,而prev指针指向原始链表的尾节点,即新链表的头结点
  14. return prev;
  15. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/272806
推荐阅读
相关标签
  

闽ICP备14008679号