1.题目

  • 输入一个链表的头结点,首先反转链表后,然后输出链表的所有元素(牛客网)。
struct ListNode {int val;struct ListNode *next;
};

2.思路

# 反转链表

  辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。

  翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指向node(确定翻转链表表头节点),然后node指向left(翻转链表),退出循环;如果不是最后一个节点,则node指向left(翻转链表),移动left和node指针。

# 鲁棒性

  • 空链表
  • 有一个节点的链表
  • 有多个节点的链表

3.code

  1 /*
  2 struct ListNode {
  3     int val;
  4     struct ListNode *next;
  5     ListNode(int x) :
  6             val(x), next(NULL) {
  7     }
  8 };*/
  9 class Solution {
 10 public:
 11     ListNode* ReverseList(ListNode* pHead)
 12     {
 13         // 反转指针
 14         ListNode* pNode=pHead;  // 当前节点
 15         ListNode* pPrev=nullptr;// 当前节点的上一个节点
 16         ListNode* pNext=nullptr;// 当前节点的下一个节点
 17         ListNode* pReverseHead=nullptr;//新链表的头指针
 18
 19         // 反转链表
 20         while(pNode!=nullptr)
 21         {
 22             pNext=pNode->next; // 建立链接
 23           
 24             if(pNext==NULL)    // 判断pNode是否是最后一个节点
 25                 pReverseHead=pNode;
 26
 27             pNode->next=pPrev; // 指针反转
 28             pPrev=pNode;
 29             pNode=pNext;
 30         }
 31         return pReverseHead;
 32     }
 33 };

转载于:https://www.cnblogs.com/wanglei5205/p/8572458.html

【剑指offer】反转链表,C++实现(链表)相关推荐

  1. 剑指offer -- 反转链表

    先摆明重要性 剑指offer -- 反转链表  校招原题 解法一:迭代 翻转 即 将所有节点的next指针指向前驱节点. 由于是单链表,我们在迭代时不能直接找到前驱节点,所以我们需要一个额外的指针保存 ...

  2. 《剑指offer》刷题——【链表】从尾到头打印链表

    <剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...

  3. 剑指offer——面试题56:链表中环的入口

    剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...

  4. 剑指 Offer II 027. 回文链表

    剑指 Offer II 027. 回文链表: 题目链接 :剑指 Offer II 027. 回文链表 题目:给定一个链表的 头节点 head ,请判断其是否为回文链表. 如果一个链表是回文,那么链表节 ...

  5. 【链表】剑指offer:反转链表

    描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头. 要求:空间复杂度 O(1),时间复杂度 O(n) . 当输入链表{1 ...

  6. [剑指offer]面试题15:链表中倒数第k个结点

    面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...

  7. 剑指offer(C++)-JZ35:复杂链表的复制(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指 ...

  8. 剑指offer反转链表(C++实现|测试用例|迭代法和递归法)

    方法1:迭代法 代码: #include<iostream> using namespace std; struct ListNode { int val; ListNode *next; ...

  9. 剑指offer:面试题22. 链表中倒数第k个节点

    题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...

  10. 剑指offer:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1-& ...

最新文章

  1. 2021年大数据Hadoop(三十):Hadoop3.x的介绍
  2. tdk磁材手册_TDK的铁氧体磁铁(FB系列) - TDK Product Center.PDF
  3. spring23:Aspectj实现异常通知@AfterThrowing
  4. Oracle单实例下oracle数据库从文件系统迁移到ASM上
  5. 未完全关闭数据库导致ORA-01012: not logged的解决
  6. 《SAS编程与数据挖掘商业案例》学习笔记之十五
  7. table 内 下拉列表 被遮挡_一个简洁、有趣的无限下拉方案
  8. 爬虫(十二):scrapy中spiders的用法
  9. 帮助中心 开源_对开源的贡献帮助我获得了Microsoft的实习机会。 这就是它可以为您提供帮助的方式。
  10. 人车识别实验丨华为ModelArts VS 百度Easy DL硬核体验
  11. 本机与服务器、镜像机之间文件互传
  12. TensorFlow 学习(九)—— 初始化函数(概率分布函数 api、常数生成函数)
  13. pyqt怎么button怎么链接_微信视频号怎么添加链接?添加微信公众号链接教程
  14. JAVA 实现 Word转PDF
  15. python工具箱系列(三)
  16. 复杂性思维第二版 三、小世界图
  17. 词汇处理——词义辨析消歧(一)
  18. The Elder(树形dp 斜率优化)
  19. 【金融项目】尚融宝项目(十六)
  20. Android sqlite执行insert,英文单引号报错问题的解决

热门文章

  1. php如何压缩txt文件怎么打开,PHP-压缩txt文件,同时保持文件扩展名
  2. 东软java的笔试_东软的笔试题
  3. java 斗地主桌号_求用java编写的斗地主程序就,要求可以在局域网内实现两桌以上同时玩。...
  4. oracle 分表设计,oracle 分库分表(sharding)
  5. php 搜索名称或者编号,ECSHOP商品关键词模糊分词搜索插件,商品列表关键字加红功能-ecshop插件网...
  6. 中小型局域网规划实战案例
  7. Zabbix服务器性能优化记录
  8. laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了
  9. Ansible基本使用及常用模块详解
  10. Ubuntu下用devstack单节点部署Openstack