反转链表
给定单链表的头节点 head
,请反转链表,并返回反转后的链表的头节点。
示例 1:
输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]
示例 2:
输入: 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
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 };
知识点
链表是一种与数组类似的线性数据结构,但与数组的元素存储在特定的内存位置或索引中不同,链表的每个元素都是独立的对象,它包含一个指向该列表中下一个对象的指针或链接。
链表的主要操作就是修改链表的指向