反转链表JS

本文详细介绍了如何通过迭代方式反转单链表,以1->2->3->NULL为例展示了反转过程,并提供了相应的JavaScript代码实现。理解链表的反转对于深入理解数据结构和算法至关重要。

示例:

输入: 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
};

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值