原题链接:https://leetcode-cn.com/problems/reverse-linked-list/
解题思路:
参考了【反转链表】:双指针,递归,妖魔化的双指针中的“好理解的双指针”部分。
- 定义两个指针,current指向链表头结点,prev为null。
- 两个指针一起向前移动,每次移动都将current指向prev,完成反转。
- 当current移出链表时,prev刚好在链表的尾节点,此时prev为反转后的新链表的头节点,可以直接返回。
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
// 定义双指针
let prev = null;
let current = head;
// 两个指针一起向前移动,每次移动都将前一个指针指向后一个。
// 遍历完成链表时,第一个指针为null,退出循环。
// 当遇到链表为空或者链表只有一个节点时,会退出循环,因此不需要判断、
while (current) {
let temp = current.next;
current.next = prev;
prev = current;
current = temp;
}
// 退出循环时,prev指针指向原链表的尾节点,新链表的头节点
return prev;
};