反转一个单链表。
示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
————————
解法一:迭代法

在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。

作者:LeetCode
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其C++代码如下:

/*** 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) {ListNode* prev = NULL;  # 初始化当前节点的上一个节点为NULLListNode* cur = head;  # 初始化当前节点为headwhile(cur != NULL)  # 如果当前节点的值不为NULL,一直迭代循环{ListNode* newl = cur->next;  # 新建一个链表,存储当前节点指向的下一个节点cur->next = prev;  # 当前节点指向的下一个节点修改为prevprev = cur;  # 当前节点的上一个节点更新为当前节点cur = newl;  # 当前节点更新为当前节点指向的下一个节点}return prev;}
};

解法二:递归法

/*** 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* newHead = reverseList(head->next);head->next->next = head;  # 反转链表head->next = NULL;  # 将当前节点指向的下一个节点标记为NULLreturn newHead;}
};

递归算法不容易理解,举个例子,有一个链表1->2->3->4->5->NULL,具体递归状态如下表示:

图片作者:王尼玛
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

leetcode - 206. 反转链表相关推荐

  1. LeetCode 206. 反转链表 Reverse Linked List

    5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...

  2. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  3. LeetCode 206. 反转链表

    206. 反转链表 难度 简单 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输 ...

  4. 【Java】LeetCode 206 反转链表

    题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...

  5. 26. Leetcode 206. 反转链表 (链表-反转链表)

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表.示例 1:输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:输入:head = [1,2] 输出:[ ...

  6. [leetcode] 206.反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输 ...

  7. LeetCode 206. 反转链表 思考分析

    题目 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可 ...

  8. LeetCode 206. 反转链表 双指针法 辅助结点 递归

    题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶: ...

  9. LeetCode 206.反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输 ...

最新文章

  1. Window10:不能建立到远程计算机的连接。你可能需要更改此连接的网络设置。
  2. 【渝粤题库】广东开放大学 C语言程序设计 形成性考核
  3. 小程序开发之基础知识(0)
  4. android 基本知识
  5. Java Adapter Pattern(适配器模式)
  6. R+python︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读
  7. linux令普通用户拥有root权限
  8. [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
  9. 2021-11-14
  10. html5 progressbar,jQuery进度条插件NUMBERPROGRESSBAR
  11. ceph pg+down+peering 故障排查与osd误删恢复
  12. 通过Matlab实现函数的简单的微分积分运算
  13. linux here,here交友app-here官网版下载v1.0-Linux公社
  14. java怎样断开http请求_http post请求管道断开
  15. LM38简易方波发生器
  16. mysql与mysqld
  17. 深入探索正交投影变换
  18. Java EE Security API ,给企业最棒的安全守护!
  19. 关于 java.util.LinkedHashMap cannot be cast to xxx错误的解决方案
  20. 170 FPS!YolactEdge:边缘设备上的实时实例分割,已开源!

热门文章

  1. [Java] Scanner(new File( )) 从文件输入内容
  2. 玉置成実(Nami Tamaki) -《もしも愿いが…》单曲[MP3]
  3. “十步一杀” 干掉你的职场压力
  4. 数据库设计技巧系列(二)——设计表和字段
  5. 来聊一聊window.fetch
  6. 申请Let's Encrypt永久免费SSL证书
  7. 现代计算机模型要求程序在执行,大学计算机基础考试考点.doc
  8. 个人猜测一下《黑神话:悟空》的部分剧情
  9. sqlachemy入门基础手册
  10. python-flask-uwsgi体验