基本思路
在遍历链表时,将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
代码实现
迭代法
借助pre变量与next变量,防止迭代过程中丢失链表
//迭代法:
var reverseList = function(head){
//if(head === null || head.next === null){
// return head
//}简写:
// 当链表为 null 或链表中仅有一个节点时,不需要反转
if(!head || !head.next){
return head
}
let prev = null //pre变量指向上一个结点(对象)
let curr = head //当前节点
//直到head为null结束循环,此时pre变量指向链表最后一个结点(对象)
while(curr){
let tmp = curr.next ////断开链表之前先存储curr的下一个节点,避免链表丢失即tmp变量指向下一个结点(对象)
curr.next = prev
prev = curr
curr = tmp
}
head = prev
return head
}
相关练习题
学习资料: bilibili:反转链表