LeetCode - 206 - 反转链表(reverse-linked-list)
2019-07-23 08:00
411 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41806099/article/details/97078689
Create by jsliang on 2019-7-13 07:54:49
Recently revised in 2019-7-13 08:42:07
一 目录
不折腾的前端,和咸鱼有什么区别| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | | 四 执行测试 | | 五 LeetCode Submit | | 六 解题思路 | | 七 进一步思考 |
二 前言
难度:简单
涉及知识:链表
题目地址:https://leetcode-cn.com/problems/reverse-linked-list/
题目内容:
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
三 解题
小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。
解题代码:
var reverseList = (head, q = null) => { if (head) { return reverseList(head.next, { val: head.val, next: q, }); } return q; }
四 执行测试
head
:
let head = { val: 1, next: { val: 2, next: { val: 3, next: { val: 4, next: { val: 5, next: null, }, }, }, }, };
return
:
{ val: 5, next: { val: 4, next: { val: 3, next: { val: 2, next: { val: 1, next: null, }, }, }, }, }
五 LeetCode Submit
√ Accepted √ 27/27 cases passed (80 ms) √ Your runtime beats 92.17 % of javascript submissions √ Your memory usage beats 6.29 % of javascript submissions (36.1 MB)
六 解题思路
智商是硬伤,知识点也可能是。经过这次解题,jsliang 将链表给标记上了,等到系统学习算法与数据结构的时候,链表是必须搞懂的点之一。首先,上面题解不是我写出来的,看的是评论区的题解,原代码是:
const reverseList = (head, q = null) => head !== null ? reverseList(head.next, { val: head.val, next: q }) : q;传说中的一行题解。然后,怕小伙伴们跟我一样懵逼,jsliang 进行了改编:
var reverseList = (head, q = null) => { console.log(q); if (head) { return reverseList(head.next, { val: head.val, next: q, }); } return q; }最后,为了方便小伙伴们理解,jsliang 将
q的过程打印了出来:
null { val: 1, next: null } { val: 2, next: { val: 1, next: null } } { val: 3, next: { val: 2, next: { val: 1, next: null } } } { val: 4, next: { val: 3, next: { val: 2, next: [Object] } } } { val: 5, next: { val: 4, next: { val: 3, next: [Object] } } } { val: 5, next: { val: 4, next: { val: 3, next: [Object] } } }嗯,对着
console.log()来思考这次递归的用意,小伙伴们应该能清楚怎么反转链表了。(虽然下次还是可能写不出,但是没关系,后面大家一起系统学习~)
七 进一步思考
上面使用了递归,下面看看迭代解法:
var reverseList = function(head) { if (head == null || head.next == null) { return head; } var current = head; var previous = null; while (current != null) { next = current.next; current.next = previous; previous = current; current = next; } return previous; };提交结果是:
√ Accepted √ 27/27 cases passed (80 ms) √ Your runtime beats 92.17 % of javascript submissions √ Your memory usage beats 70.6 % of javascript submissions (34.8 MB)感兴趣的小伙伴可以推演下迭代的思路,在此 jsliang 就不多滴滴啦~
不折腾的前端,和咸鱼有什么区别! jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!
jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。
相关文章推荐
- leetcode206 Reverse Linked List(反转链表)
- C#LeetCode刷题之#206-反转链表(Reverse Linked List)
- scala反转链表 leetcode 206 Reverse Linked List
- LeetCode206——Reverse Linked List 反转链表
- [LeetCode-206] Reverse Linked List(链表反转)
- leetcode解题之206 # Reverse Linked List Java版 (使用头插法反转链表)
- LeetCode 206 Reverse Linked List(反转链表)(Linked List)(四步将递归改写成迭代)(*)
- leetcode206/92---Reverse Linked List I/II(反转链表)
- leetcode206-Reverse Linked List-反转链表
- 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解
- LeetCode 206 Reverse Linked List(反转链表)(四步将递归改写成迭代)(*)
- 【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】
- leetcode 92. Reverse Linked List II 反转链表 + 头插入反转链表(或者使用栈)
- C实现 LeetCode->Reverse Linked List (双指针大法)(单链表反转)
- Leetcode Reverse Linked List II 反转特定区间的链表
- LeetCode 206 Reverse Linked List (逆置链表)
- Leetcode Reverse Linked List II 反转部分单向链表
- [leetcode] Reverse Linked List II 链表反转
- Leetcode 206 Reverse Linked List 链表
- LeetCode 25 Reverse Nodes in k-Group(在K组链表中反转结点)(Linked List)(*)