代码随想录算法训练营第三天 | 链表理论根本 | 206.反转链表 ...

打印 上一主题 下一主题

主题 1033|帖子 1033|积分 3099

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  • 从老链表第一个元素开始,逐个取出

    • 第一个取出的元素,让其next指向nullptr。由于改变其指向,会导致后续链表没有指向消散,以是要在这步之前将厥后续元素的指向放在一个新变量中
    • 再将后续结点的指向当前结点,不停反复运行就可以实现链表反转

  • 难点就是怎样在设置链表指向结点时,不同指针的关系不要杂乱
    1. #include <iostream>
    2. struct ListNode {
    3.     int val;
    4.     ListNode* next;
    5.     ListNode(): val(0), next(nullptr) {}
    6.     ListNode(int v): val(v), next(nullptr) {}
    7.     ListNode(int v, ListNode* _next): val(v), next(_next) {}
    8. };
    9. class Solution {
    10. public:
    11.     ListNode* reverseList(ListNode* head) {
    12.         ListNode* cur = head, *pre = nullptr;
    13.         for ( ; cur != nullptr; ) {
    14.             ListNode* temp = cur->next;
    15.             cur->next = pre;
    16.             pre = cur;
    17.             cur = temp;
    18.         }
    19.         return pre;
    20.     }
    21. };
    22. void show(ListNode* head) {
    23.     for (auto* p = head; p != nullptr; p = p->next)
    24.         std::cout << p->val << " ";
    25.     std::cout << std::endl;
    26. }
    27. int main()
    28. {
    29.     ListNode* l5 = new ListNode(5);
    30.     ListNode* l4 = new ListNode(4, l5);
    31.     ListNode* l3 = new ListNode(3, l4);
    32.     ListNode* l2 = new ListNode(2, l3);
    33.     ListNode* l1 = new ListNode(1, l2);
    34.     show(l1);
    35.     Solution s;
    36.     ListNode* head = s.reverseList(l1);
    37.     show(head);
    38.     return 0;
    39. }
    复制代码
  • 核心代码在11行到23行
  • 汇总

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表