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; // 返回新头结点
};



目录
相关文章
|
4月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
51 1
|
4月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
65 0
Leetcode第21题(合并两个有序链表)
|
4月前
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
157 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
|
4月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
42 0
LeetCode第二十四题(两两交换链表中的节点)
|
4月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
54 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
4月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
121 0
|
4月前
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
34 0
|
4月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
25 0
|
4月前
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
22 0
|
4月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
41 0

热门文章

最新文章