作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。

数据范围: n小于等于1000

要求:空间复杂度 O(1),时间复杂度 O(n)

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

以上转换过程如下图所示:

示例:

输入:

{1,2,3}

返回值:

{3,2,1}

解题思路:

本题考察数据结构链表的使用。有两种解法:

  1. 结合vector解,将链表指针存放在vector中,进行反转操作,再依次赋给新的链表nhead即可。
  2. 用链表指针解,使用三个指针pre、cur、nex,nex即原链表指向下一个,cur即原链表当前指向,pre为原链表前一个指针。令nex=cur->next,将下一个指针临时存放在nex;cur->next=pre,表示将当前指针指向前一个指针,也就是反向指向;pre=cur,cur=nex,即指针后移,然后就可以操作下一个指针了。当cur为空时遍历完成,此时的pre就是反转好的链表。

测试代码:

解法一,结合vector:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* ReverseList(ListNode* pHead) {if(!pHead)return nullptr;vector<ListNode*> v;while(pHead){v.push_back(pHead);pHead=pHead->next;}reverse(v.begin(),v.end());ListNode *nhead=v[0];ListNode *nex=nhead;for(int i=1;i<v.size();++i){nex->next=v[i];nex=nex->next;}nex->next=nullptr;return nhead;}
};

解法二,链表指针:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* ReverseList(ListNode* pHead) {ListNode *pre=nullptr;ListNode *cur=pHead;ListNode *nex=nullptr;while(cur){nex=cur->next;cur->next=pre;pre=cur;cur=nex;}return pre;}
};

剑指offer(C++)-JZ24:反转链表(数据结构-链表)相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java

    <LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...

  2. LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表

    剑指 Offer 06. 从尾到头打印链表 Ideas 遍历链表,每次在vector的头部insert当前元素值. Code C++ class Solution {public:vector< ...

  3. 【LeetCode】剑指 Offer 06. 从尾到头打印链表

    [LeetCode]剑指 Offer 06. 从尾到头打印链表 文章目录 [LeetCode]剑指 Offer 06. 从尾到头打印链表 一.笨比解法 二.递归法 三.辅助栈法 总结 一.笨比解法 算 ...

  4. 剑指offer——面试题57:删除链表中重复的结点

    剑指offer--面试题57:删除链表中重复的结点 Solution1: 删两遍,自己想的破算法.理论上时间复杂度也是O(n)O(n)O(n),并非最优解. /* struct ListNode {i ...

  5. 剑指offer——面试题26:复杂链表的复制

    剑指offer--面试题26:复杂链表的复制 Solution1: 小套路记住就行!!! 根据书上复杂度为O(n)O(n)O(n)的算法写的,此题加深了对于链表指针的理解与应用! /* struct ...

  6. 剑指offer系列-24.反转链表

    剑指offer系列第24题.反转链表 题目描述: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例:输入: 1->2->3->4->5->N ...

  7. 剑指Offer #03 从尾到头打印链表(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 题目解析 方法一: 因为题目要求返回的顺序是从尾到头,所以我 ...

  8. C#刷剑指Offer | 在O(1)时间删除链表节点

    [C#刷题]| 作者 / Edison Zhou 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目),希望对你有帮助!本文题目为:在O(1)时间删 ...

  9. 剑指 Offer 06. 从尾到头打印链表(python3编写)

    目录 1.题目描述: 2.方法一:使用栈保存结果 思路: 代码(迭代法): 代码(递归法): 3.方法二:反转链表 思路: 代码: 4.方法三:保存数组,再反转数组 思路: 代码: 5.总结: 1.题 ...

  10. 【剑指Offer】从尾到头打印链表

    剑指Offer 从尾到头打印链表 题目描述 解法1 实现代码 一点补充 题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解法1 这道题主要思路是while循环从头遍历整个列 ...

最新文章

  1. js动态创建元素之一--document.write
  2. spss聚类分析_SPSS聚类分析 I K均值聚类法案例实操
  3. 基于Spring Cloud实现微服务前后端系统
  4. python数据对比找不同,不同模式间的数据比较技术
  5. Svn服务器的搭建与配置
  6. 【面试准备·2】webpack
  7. php时间戳对比,php+js+时间戳比较,输出不同内容
  8. 产品研发过程管理专题——编写软件测试计划需要考虑的几个问题
  9. Android 如何通过Retrofit提交Json格式数据
  10. 工单发料,退料等一些物料的移动
  11. 设计模式之建造者(builder)模式
  12. 数据库得事务控制详解,什么是事务回滚详解,通俗易懂
  13. 杨华杰 清华大学计算机,软件工程课程设计机票预订系统【参考】.doc
  14. 病理与病理生理学【3】
  15. 为什么说微博、微信、贴吧、头条们都在做同一件事?
  16. (node:22344) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permit
  17. Java程序员最全面的学习路线图
  18. 用python画风景图_NV这个AI黑科技简直绝了!几笔画出逼真照片
  19. [国嵌攻略][054][NandFlash驱动设计_写]
  20. Android自定义PopWindow

热门文章

  1. window powershell 筛选
  2. Nginx从入门到掌握【(第3节(共3节)】
  3. Android之Button按钮
  4. apache storm 1.0.0 新特性
  5. 追本溯源:字符串及编码
  6. linux 双显卡 黑屏 amd,ubuntu上AMD显卡驱动黑屏问题的一种解决办法
  7. ssm基于儿童教育网站答辩PPT模板
  8. django 查询mysql_Django 数据库查询方法一
  9. py2exe支持python3.6_使用Py2Exe for Python3创建自己的exe程序示例
  10. buck电路_2步避免BUCK电路中的“地弹”