V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CoderOnePolo
V2EX  ›  编程

每天一算: Reverse Linked List

  •  
  •   CoderOnePolo · 2018-11-03 09:34:59 +08:00 · 2381 次点击
    这是一个创建于 1993 天前的主题,其中的信息可能已经有所发展或是发生改变。

    LeetCode 上第 206 号问题:Reverse Linked List

    题目

    反转一个单链表。

    示例:

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

    进阶:

    你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

    解题思路

    设置三个节点precurnext

    • ( 1 )每次查看cur节点是否为NULL,如果是,则结束循环,获得结果
    • ( 2 )如果cur节点不是为NULL,则先设置临时变量nextcur的下一个节点
    • ( 3 )让cur的下一个节点变成指向pre,而后pre移动curcur移动到next
    • ( 4 )重复( 1 )( 2 )( 3 )

    动画演示

    动画演示 GIF 有点大,请稍微等待一下加载显示^_^

    动画演示

    参考代码

    迭代的方式处理
    // 206. Reverse Linked List
    // https://leetcode.com/problems/reverse-linked-list/description/
    // 时间复杂度: O(n)
    // 空间复杂度: O(1)
    class Solution {
    public:
        ListNode* reverseList(ListNode* head) {
    
            ListNode* pre = NULL;
            ListNode* cur = head;
            while(cur != NULL){
                ListNode* next = cur->next;
                cur->next = pre;
                pre = cur;
                cur = next;
            }
    
            return pre;
        }
    };
    
    
    递归的方式处理
    // 206. Reverse Linked List
    // https://leetcode.com/problems/reverse-linked-list/description/
    //
    // 递归的方式反转链表
    // 时间复杂度: O(n)
    // 空间复杂度: O(1)
    class Solution {
    public:
        ListNode* reverseList(ListNode* head) {
    
            // 递归终止条件
            if(head == NULL || head->next == NULL)
                return head;
    
            ListNode* rhead = reverseList(head->next);
    
            // head->next 此刻指向 head 后面的链表的尾节点
            // head->next->next = head 把 head 节点放在了尾部
            head->next->next = head;
            head->next = NULL;
    
            return rhead;
        }
    };
    

    执行结果

    敬请关注

    我们会在公众号(菠了个菜)上每天早上 8 点 30 分准时推送一条 LeetCode 上的算法题目,并给出该题目的动画解析以及参考答案,每篇文章阅读时长为五分钟左右。

    2 条回复    2018-11-03 10:23:51 +08:00
    yifanes
        1
    yifanes  
       2018-11-03 10:10:11 +08:00 via iPhone
    希望可以坚持,或者至少 200 题+
    CoderOnePolo
        2
    CoderOnePolo  
    OP
       2018-11-03 10:23:51 +08:00
    @yifanes 会坚持住的,目前已经写了 40+
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3278 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:17 · PVG 20:17 · LAX 05:17 · JFK 08:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.