LeetCode:206. 反转链表 | JavaScript解题

简介: LeetCode:206. 反转链表 | JavaScript解题

206. 反转链表

难度简单2766

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

 

示例 1:

微信截图_20221112163724.png


输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]
复制代码


示例 2:

微信截图_20221112163738.png

输入: head = [1,2]
输出: [2,1]
复制代码


示例 3:

输入: head = []
输出: []
复制代码

 

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

 

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


思路

方法1:递归。

微信截图_20221112163802.png


/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
    if (head == null) return null; // 空链表
    if (head.next == null) return head; // 只有一个节点
    let newHead = reverseList(head.next); // 指向链表末尾节点
    head.next.next = head; // newHead->1->2->3->4->5->null
    head.next = null;
    return newHead;
};
复制代码


方法2. 非递归解法 - 头插法:

微信截图_20221112163837.png

微信截图_20221112163848.png

微信截图_20221112163907.png

微信截图_20221112163920.png


/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
    let newHead = null; // 产生新节点
    while(head != null) {
        let temp = head.next; // 记录head.next节点(head 节点不断后移)
        head.next = newHead; // 链接新节点
        newHead = head; // 链接新添加的节点
        head = temp; // 更新head节点
    }
    return newHead; // 返回新头结点
};



目录
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
242 1
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
299 0
Leetcode第21题(合并两个有序链表)
|
算法 Go
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 23——合并 K 个升序链表的两种解法:优先队列(最小堆)和分治合并。题目要求将多个已排序链表合并为一个升序链表。最小堆方法通过维护节点优先级快速选择最小值,;分治合并则采用归并思想两两合并链表。文章提供了 Go 语言实现代码,并对比分析两种方法的适用场景,帮助读者深入理解链表操作与算法设计。
506 10
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
789 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
236 0
LeetCode第二十四题(两两交换链表中的节点)
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
302 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
365 0
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
198 0
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
276 0
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
137 0