示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
举个栗子
以链表 1->2->3->NULL 为栗子,反转过程如下:
开始

next:调整头节点的下一节点之前,先记录其先前的下一节点(next = head->next),以防止链表断开后找不到其之前的下一节点

头节点断开与其下一节点的连接(head->next = pre),并反转(指向 NULL)

不断遍历,直到头节点指向链表的尾节点的下一节点(空节点)
pre = head

head 右移,head = next

next 指向当前head的下一节点

head 指向 pre 指向的节点,实现 1->2 之间反转

pre 右移

head 右移

next 指向当前 head 的下一节点

断开 2->3 之间的连接,head->next = pre

head 指向 pre 指向的节点,实现 2->3 之间的反转

pre 右移

head 节点右移到空节点,遍历结束

代码:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let prev = null, curr = head
while (curr) {
const next = curr.next
curr.next = prev
prev = curr
curr = next
}
return prev
};
本文详细介绍了如何通过迭代方式反转单链表,以1->2->3->NULL为例展示了反转过程,并提供了相应的JavaScript代码实现。理解链表的反转对于深入理解数据结构和算法至关重要。

199

被折叠的 条评论
为什么被折叠?



