链表的逆置

发布时间:2024年01月13日

先准备一个链表

// 定义节点构造函数
function Node(value){
	this.value = value;
	this.next = null;
}

// 初始化5个node实例
let node1 = new Node(1);
let node2 = new Node(2);
let node3 = new Node(3);
let node4 = new Node(4);
let node5 = new Node(5);

// 将这5个实例串联起来,形成一个链表
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;

/** 
* 逆置链表的方法
* @param root 根节点
function nizhi(root){
	if(root.next.next === null){ // 代表当前节点(root)是倒数第二个节点
		root.next.next = root; // 让最后一个节点指向(root.next)自己(倒数第二个节点)
		return root.next; // 递归的出口,返回最后一个根节点(node5);
	} else {
		let nextNode = nizhi(root.next); // 调用下一个节点
		// 如果不是末级(node5),则让下一个节点的next指向自己
		root.next.next = root; // (node2的next指向node1;node3的next指向node2;以此类推...)
		root.next = null; // node1的next指向null
		return nextNode; // 递归结束,返回最后一个被遍历的节点
	}
}
// 调用逆置函数
nizhi(node1)

如下图所示,逆置成功
在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_42950333/article/details/135563594
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。