题目要求


Reverse a singly linked list.
LeetCode 206在线测试

问题描述


给定一个单项链表,将其反转后返回链表头节点。

思路分析1


可以完整的遍历一遍链表,将链表的每个节点的值存在数组中,然后反向遍历数组重新生存一个新
链表。这样做需要有O(N)的空间复杂度

代码验证1

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == NULL || head->next == NULL) {return head;}vector<int> nodeVals;for (ListNode* p = head; p != NULL; p = p->next) {nodeVals.push_back(p->val);}ListNode* pNewHead = NULL;ListNode* pTail = NULL;for (int i = nodeVals.size() - 1; i >= 0; --i) {ListNode* pNew = new ListNode(nodeVals[i]);if (pTail == NULL) {pNewHead = pNew;pTail = pNew;} else {pTail->next = pNew;pTail = pNew;}}return pNewHead;}
};

思路分析2


遍历一次链表,每次遍历到其中一个节点时,尝试将它链表指向改变,改成指向他前一个节点,
原来链表的首节点比较特殊,需要将它的下一个指向NULL。

具体的操作流程如下图所示:

代码验证2

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == NULL || head->next == NULL) {return head;}ListNode* pre = head;pre->next = NULL;ListNode* cur = head->next;ListNode* next = NULL;while (cur != NULL) {next = cur->next;cur->next = pre;pre = cur;cur = next;}return pre;
};

总结注意


反转链表时,可以针对当前遍历到的节点,改变当前节点的next指针指向,实现反转当前
节点的效果。而当每个节点都执行相同的操作时,就可以实现反转整条单项链表的目的

原创声明


作者:hgli_00
链接:http://www.cnblogs.com/lihuagang/p/leetcode_206.html
来源:博客园
著作权归作者所有,转载请联系作者获得授权。

转载于:https://www.cnblogs.com/lihuagang/p/leetcode_206.html

[LeetCode] [C++] 206 Reverse Linked List 反转单项链表相关推荐

  1. LeetCode Notes_#206 Reverse Linked List(C++,Python)

    LeetCode Notes_#206 Reverse Linked List(C++,Python) LeetCode Linked List  Contents 题目 思路 思考 解答 C++ P ...

  2. leetCode 206. Reverse Linked List 反转链表

    206. Reverse Linked List Reverse a singly linked list. 反转一个链表. 思路: 采用头插法,将原来链表重新插一次返回即可. 代码如下: /*** ...

  3. 206. Reverse Linked List

    Reverse a singly linked list. 反转单链表 C++(9ms):  迭代 1 /** 2 * Definition for singly-linked list. 3 * s ...

  4. LeetCode 206 Reverse Linked List--反转链表--迭代与递归解法--递归使用一个临时变量,迭代使用3个

    此题链接:Reverse Linked List - LeetCode Reverse a singly linked list. Example: Input: 1->2->3-> ...

  5. Leetcode 206. Reverse Linked List

    Similar Questions Reverse Linked List II Binary Tree Upside Down Palindrome Linked List 思路:链表反转. 解法一 ...

  6. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  7. LeetCode in Python-7. Reverse Integer 整数反转

    Reverse Integer 整数反转 题目 解法1.利用数值反转数字 解法2.字符串反转 解法3. 出处 题目 解法1.利用数值反转数字 class Solution:def reverse(se ...

  8. leetcode python3 简单题206. Reverse Linked List

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百零六题 (1)题目 英文: Reverse a singly linked l ...

  9. Java for LeetCode 206 Reverse Linked List

    Reverse a singly linked list. 解题思路: 用Stack实现,JAVA实现如下: public ListNode reverseList(ListNode head) {i ...

最新文章

  1. 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
  2. jquery文档加载完毕后执行的几种写法
  3. 数据中心节能制冷---冷却塔帮忙
  4. 关于STL的一些笔记
  5. 透过现象看本质:Java类动态加载和热替换
  6. 浅谈如何提高自动化测试的稳定性和可维护性 (pytestallure)
  7. Java计划任务:ScheduledThreadPoolExecutor
  8. 【心电信号】基于matlab GUI心电信号数字滤波处理【含Matlab源码 484期】
  9. 前沿重器[25] | 聊聊对话系统:多轮对话
  10. 尼康数码相机照片数据恢复怎么办
  11. 【Python纪念册】哪些浪漫至极的表白程序—“你做我的男孩,我做你的宇宙”
  12. solidworks图纸模板添加_solidworks工程图模板制作教程(中)
  13. 数据治理成功要素篇1:数据战略管理
  14. rainyday.js 下雨效果插件使用方法
  15. 众里寻她千百度,wordperss 热键
  16. 转:乱谈Dotnet之武林秘籍
  17. 计算机网络汇聚层,【大白电气】接入层、汇聚层、核心层——中大型计算机网络系统结构介绍及交换机选型建议...
  18. 发生事故单位照常发工资可不可以索要误工费
  19. C/C++ 如何构造出强悍的宏
  20. 2021-2027全球与中国β-雌二醇 (CAS 50-28-2)市场现状及未来发展趋势

热门文章

  1. Android 调整屏幕分辩率
  2. protocol buffers使用说明
  3. 李洋疯狂C语言之用递归解决李白喝酒问题(二)
  4. keepalived与lvs结合使用配置实例
  5. 国产毫米波雷达领域的领头羊,木牛科技将在明年量产77GHz汽车雷达
  6. 拼接SQL的一个技巧
  7. App 运营的指标具体都有哪些?(四)
  8. 一个简单的Makefile模板
  9. Mysql数据库的分离和附加转
  10. linux下软件的基本安装和卸载