题目
题目来源:力扣(LeetCode)
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路分析
定义一个 prev 指针,指向 null,然后定义一个 curr 指针,指向链表的头节点,即 curr = head,再定义一个 next 指针,指向 curr 指针所指向的节点的下一个节点。
- 首先,我们将 curr 指针所指向的节点的next指针指向 prev 指针所指向的节点,即将当前节点的next 指针改为指向前一个节点
- 然后将指针 prev 移到 curr 指针所在的位置,即将 prev 指针指向当前节点;保持对当前节点的引用
- 接着将 curr 指针移到next指针的位置,即将 curr 指针所指向的节点变为 next 指针所指向的节点;
- 此时 curr 指针已经往后移了一位,那么next 指针也应该往后移一位,保持对下一个节点的引用
- 重复上述操作,当 curr 指针指向 null 的时候,我们就完成了整个链表的反转
const reverseList = function (head) {
if (!head) return null;
// 首先定义一个 prev 指针指向 null
let prev = null;
// 定义 curr 指针指向 head 节点
let curr = head;
while(curr) {
// 定义一个 next 指针指向当前节点的下一个节点 (curr所指向的节点的next指针域指向的节点)
const next = curr.next;
// 将当前节点的next指针域改为指向前一个节点
curr.next = prev;
// prev 指针移动到 curr 指针的位置,变为指向当前的节点
prev = curr;
// 将 curr 指针移动到 next 指针的位置,curr 指向变为指向next 指针指向的节点
curr = next;
}
// 遍历链表,当 curr 指针指向 null 的时候,说明我们已经完成了链表的反转
return prev
}