zoukankan      html  css  js  c++  java
  • 逆置单链表

    我自己的方法是用的递归,毕竟也是接触了一点点点点点点 scheme 的骚年是吧,代码如下:

    ListNode* reverseList(ListNode* head) {
        if (head == nullptr){
            return nullptr;
        }
        
        ListNode* newHead = nullptr;
        
        function<void(ListNode*)> reverse;
        reverse = [&](ListNode* node)
        {
            if (node->next == nullptr){
                newHead = node;
                return;
            }
            
            reverse(node->next);
            node->next->next = node;
            node->next = nullptr;
        };
        reverse(head);
        return newHead;
    }

    毕竟是递归,我琢磨着会不会迭代会快一点,于是有了如下版本:

    ListNode* reverseList(ListNode* head) {
        if (head == nullptr || head->next == nullptr){
            return head;
        }
        
        ListNode* previous = head;
        ListNode* current  = head->next;
        ListNode* next     = nullptr;
        while (current != nullptr){
            next = current->next;
            current->next = previous;
            previous = current;
            current  = next;
        }
        head->next = nullptr;
        return previous;
    }

     结果也是 8ms 啊,令人失望。

    然后这是在过了一周之后,我写的代码:

    ListNode* reverseList(ListNode* head)
    {
        if (head == nullptr || head->next == nullptr){
            return head;
        }
        
        auto newHead = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return newHead;
    }
  • 相关阅读:
    Java中Bitmap的实现
    链接备用
    91家纺网,利用cookies登录
    selenium验证码pic处理代码,以91家纺网为例
    91家纺网,登录代码
    91家纺网,模拟浏览器登录
    91家纺网,models
    91家纺网,setting文件
    91家纺网,更新
    91家纺网,更新
  • 原文地址:https://www.cnblogs.com/wuOverflow/p/4702567.html
Copyright © 2011-2022 走看看