LeetCode反转链表使用JavaScript解题|前端学算法

简介: LeetCode反转链表使用JavaScript解题|前端学算法

反转链表


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

示例 1:


image.png


输入: head = [1,2,3,4,5]

输出: [5,4,3,2,1]

示例 2:

image.png

输入: head = [1,2,3,4,5]

输出: [5,4,3,2,1]


解题思路


反转链表就是将当前节点的 next 指针改为指向前一个节点。所以我们只需要将链表的头部指向null,第一个节点的next指向head,第二个节点的next指向第一个节点这样一次类推,我们可以用一个变量 current存储当前节点;pre用来存储上一个节点,这样依次修改节点的next指向,直到当前节点为空

拆分为如下步骤:

  • 第一步:初始化上一个节点pre为空;将头结点赋值给当前节点current
  • 第二步:当当前节点有值时进入循环:循环内主要是修改next指向
  • 获取当前节点的下一个节点 next
  • 令当前节点指向 上一个节点pre
  • 当前节点变成上一个节点
  • 下一个节点 变成当前节点;开始再次操作当前节点,修改当前节点的指向
  • 第三步:经过循环后,pre就变成了头结点,所以返回pre


image.png


image.png


var reverseList = function(head) {
    let pre = null
    let current = head
    while(current !== null){
        let next = current.next // 下一个节点
        current.next = pre
        pre = current
        current = next
    }
    return pre
};


image.png


知识点


链表是一种与数组类似的线性数据结构,但与数组的元素存储在特定的内存位置或索引中不同,链表的每个元素都是独立的对象,它包含一个指向该列表中下一个对象的指针或链接。

链表的主要操作就是修改链表的指向



目录
相关文章
|
8天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
13 1
|
8天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
13 0
|
8天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
11 0
|
3天前
|
JavaScript 前端开发 算法
JavaScript的垃圾回收机制通过标记-清除算法自动管理内存
【5月更文挑战第11天】JavaScript的垃圾回收机制通过标记-清除算法自动管理内存,免除开发者处理内存泄漏问题。它从根对象开始遍历,标记活动对象,未标记的对象被视为垃圾并释放内存。优化技术包括分代收集和增量收集,以提升性能。然而,开发者仍需谨慎处理全局变量、闭包、定时器和DOM引用,防止内存泄漏,保证程序稳定性和性能。
9 0
|
8天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
9 1
|
8天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
6 1
|
8天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
11 1
|
8天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
8天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
10 0
|
8天前
|
算法 前端开发 搜索推荐
前端算法之选择排序
前端算法之选择排序
12 0