C++实现LeetCode(206.倒置链表)

 更新时间:2021年08月06日 16:30:04   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(206.倒置链表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 206.Reverse Linked List 倒置链表

Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?

 之前做到 Reverse Linked List II 的时候我还纳闷怎么只有二没有一呢,原来真是忘了啊,现在才加上,这道题跟之前那道比起来简单不少,题目为了增加些许难度,让我们分别用迭代和递归来实现,但难度还是不大。我们先来看迭代的解法,思路是在原链表之前建立一个空的newHead,因为首节点会变,然后从head开始,将之后的一个节点移到newHead之后,重复此操作直到head成为末节点为止,代码如下:

解法一:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *newHead = NULL;
        while (head) {
            ListNode *t = head->next;
            head->next = newHead;
            newHead = head;
            head = t;
        }
        return newHead;
    }
};

下面我们来看递归解法,代码量更少,递归解法的思路是,不断的进入递归函数,直到head指向倒数第二个节点,因为head指向空或者是最后一个结点都直接返回了,newHead则指向对head的下一个结点调用递归函数返回的头结点,此时newHead指向最后一个结点,然后head的下一个结点的next指向head本身,这个相当于把head结点移动到末尾的操作,因为是回溯的操作,所以head的下一个结点总是在上一轮被移动到末尾了,但head之后的next还没有断开,所以可以顺势将head移动到末尾,再把next断开,最后返回newHead即可,代码如下:

解法二:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (!head || !head->next) return head;
        ListNode *newHead = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
};

到此这篇关于C++实现LeetCode(206.倒置链表)的文章就介绍到这了,更多相关C++实现倒置链表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言rewind与fseek函数之随机读写文件的用法详解

    C语言rewind与fseek函数之随机读写文件的用法详解

    这篇文章主要介绍了C语言rewind与fseek函数之随机读写文件的用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C++ 右值引用与 const 关键字详解

    C++ 右值引用与 const 关键字详解

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符,这篇文章主要介绍了C++ 右值引用与 const 关键字,需要的朋友可以参考下
    2022-10-10
  • windows 使用ffmpeg .a静态库读取Wav音频并保存PCM的方法

    windows 使用ffmpeg .a静态库读取Wav音频并保存PCM的方法

    这篇文章主要介绍了windows 使用ffmpeg .a静态库读取Wav音频并保存PCM,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • c++函数名指针和函数指针

    c++函数名指针和函数指针

    这篇文章主要介绍了c++函数名指针和函数指针,函数指针和数据类似,C++当中函数也有地址,函数的地址是存储函数机器语言代码的内存地址。我们可以将另外一个函数的地址作为参数传入函数,从而实现函数的灵活调用,下面详细内容需要的小伙伴可以参考一下
    2022-02-02
  • QT实现简单音乐播放器

    QT实现简单音乐播放器

    这篇文章主要为大家详细介绍了QT实现简单的音乐播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C++教程(超长最全入门)

    C++教程(超长最全入门)

    这篇文章主要介绍了C++教程(超长最全),需要的朋友可以参考下
    2023-05-05
  • C++中的vector容器对象学习笔记

    C++中的vector容器对象学习笔记

    这篇文章主要介绍了C++中的vector容器对象学习笔记,其中文章最后标红的resize与reserve方法的差别特别需要注意,需要的朋友可以参考下
    2016-05-05
  • 利用C语言实践OOP,以及new,delete的深入分析

    利用C语言实践OOP,以及new,delete的深入分析

    本篇文章是对用C语言实践OOP,new,delete进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++多线程编程详解

    C++多线程编程详解

    这篇文章主要介绍了c语言多线程编程使用示例,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • C++实现播放音频的示例详解

    C++实现播放音频的示例详解

    这篇文章主要为大家详细介绍了C++如何利用第三方库实现播放音频的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01

最新评论