• 【LeetCode】【剑指offer】【反转链表】


    剑指 Offer 24. 反转链表

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL
     

    限制:

    0 <= 节点个数 <= 5000

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

     

    第一种思路就是遍历我们的链表,并且将我们链表中的数据压入我们的栈中。

    第一次遍历完之后,我们再次从头遍历我们的链表,将我们的数据从栈中取出,放入我们链表的结点中,这样就将我们链表中的数据成功逆置了。 

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode(int x) : val(x), next(NULL) {}
    7. * };
    8. */
    9. class Solution {
    10. public:
    11. ListNode* reverseList(ListNode* head) {
    12. ListNode* tmp=head;
    13. stack<int> st1;
    14. while(tmp!=nullptr)
    15. {
    16. st1.push(tmp->val);
    17. tmp=tmp->next;
    18. }
    19. tmp=head;
    20. while(tmp!=nullptr)
    21. {
    22. tmp->val=st1.top();
    23. st1.pop();
    24. tmp=tmp->next;
    25. }
    26. return head;
    27. }
    28. };

    这里我们看到由于我们遍历了两遍链表,并且使用了stack,所以我们的执行时间和内存消耗都没有特别优秀 

    这个时候我们可以考虑使用第二种方法,就是在遍历链表的同时,将链表逆置。 

     

    这里我们需要注意的是在代码初始的时候要判断tmp是否为nullptr,因为测试用例中有[]

    有了tmp不是nullptr,还要判断pre是否为nullptr,因为测试用例中有[1]

    然后我们迭代最终的循环结束可以pre->next==nullptr为终点

    然后将链表的最后一个结点反转,返回pre即可 

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode(int x) : val(x), next(NULL) {}
    7. * };
    8. */
    9. class Solution {
    10. public:
    11. ListNode* reverseList(ListNode* head) {
    12. ListNode* tmp=head;
    13. if(tmp==nullptr)
    14. {
    15. return head;
    16. }
    17. ListNode*pre=head->next;
    18. if(pre==nullptr)
    19. {
    20. return head;
    21. }
    22. tmp->next=nullptr;
    23. while(pre->next!=nullptr)
    24. {
    25. ListNode* pre_pre=pre->next;
    26. pre->next=tmp;
    27. tmp=pre;
    28. pre=pre_pre;
    29. }
    30. pre->next=tmp;
    31. return pre;
    32. }
    33. };

     

     

  • 相关阅读:
    python-pytorch 关于torch.load()和torch.load_state_dict()
    操作系统笔记(王道考研) 第三章:内存管理
    Error: impossible constraint in ‘asm‘
    需求分析之道——需求分析要做什么(C系架构设计法,sishuok)
    RH8WEB服务器
    C++11特性-智能指针
    GitHub -- 新增 SSH 密钥到 GitHub 帐户
    从应用访问Pod元数据-DownwardApi的应用
    dubbo入门小案例
    LeetCode --- 1365. How Many Numbers Are Smaller Than the Current Number 解题报告
  • 原文地址:https://blog.csdn.net/weixin_62684026/article/details/126348857