链表 – 快速增删的线性存储结构

反转链表

递归版本

递归问题分清已处理的子问题、正在处理的当前问题、将要处理的父问题:在子问题基础上叠加当前层处理形成新的已解决子问题,有关返回值的利用有二:①子调用返回值后在当前层的处理②当前层作为子调用可以给父调用返回什么
此处
①每层修改后续节点指针,使得 后->前
②父调用需要新头节点,每层子调用返回原尾节点
其他细节:
①当前层完成 后->前 之后,应清空 前->后 避免形成环,本操作同时使原头节点变为后续为空的尾节点
②递归边界是返回非空尾节点,以及对空样例的解决

ListNode *reverseList(ListNode *head) {
    if (head == nullptr || head->next == nullptr)
        return head;
    ListNode *suc = reverseList(head->next);
    head->next->next = head;
    head->next = nullptr;
    return suc;
}

迭代版本

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

©2018-2024 Howell版权所有 备案号:冀ICP备19000576号