📅  最后修改于: 2023-12-03 15:40:55.210000             🧑  作者: Mango
在Javascript中,链表是一种常见的数据结构,它由许多节点组成,每个节点包含一个值和指向下一个节点的指针。链表是动态的,意味着可以在运行时添加或删除节点。在某些应用程序中,需要对链表进行旋转,例如将链表的最后一个节点移动到链表的开头。本文将介绍如何使用Javascript旋转一个链表,其中包含以下内容:
链表是一种按顺序排列的数据结构,具有以下特点:
以下是如何在Javascript中创建链表的示例代码:
class ListNode {
constructor(val, next) {
this.val = val;
this.next = next;
}
}
const node1 new ListNode(1);
const node2 new ListNode(2);
const node3 new ListNode(3);
const node4 new ListNode(4);
const node5 new ListNode(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = null;
在这个示例中,我们创建了一个包含5个节点的链表。每个节点都包含一个值和指向下一个节点的指针。链表的末尾节点指向null。
我们将使用以下步骤来旋转链表:
length - k % length - 1
)位置的节点。以下是用于链表顺时针旋转的Javascript程序的实现代码和示例:
function rotateRight(head, k) {
if (!head || !head.next || k === 0) {
return head;
}
let current = head;
let length = 1;
while (current.next !== null) {
current = current.next;
length++;
}
current.next = head;
for (let i = 0; i < length - k % length - 1; i++) {
head = head.next;
}
const newHead = head.next;
head.next = null;
return newHead;
}
const node1 = new ListNode(1);
const node2 = new ListNode(2);
const node3 = new ListNode(3);
const node4 = new ListNode(4);
const node5 = new ListNode(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = null;
rotateRight(node1, 2);
我们定义了一个rotateRight
函数,该函数接受两个参数:链表的头节点和旋转次数k。如果链表或链表的下一个节点是null,或者k等于0,函数将返回链表本身。如果链表不为空,我们首先计算链表的长度,并将链表的末尾节点连接到链表的头部。然后,我们从链表的头部开始遍历链表,直到找到新的链表末尾节点的前一个节点,即(length - k % length - 1
)位置的节点。将该节点的下一个节点作为新链表的头部,将该节点的下一个节点设置为null。最后,返回新链表的头节点。
我们使用以下示例进行测试:
const node1 = new ListNode(1);
const node2 = new ListNode(2);
const node3 = new ListNode(3);
const node4 = new ListNode(4);
const node5 = new ListNode(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = null;
rotateRight(node1, 2);
运行后,我们得到如下输出:
ListNode {
val: 4,
next: ListNode { val: 5, next: ListNode{ val: 1, next: ListNode{ val: 2, next: ListNode{ val: 3, next: null } } } }
}
该输出表示链表顺时针旋转2次后的结果为4->5->1->2->3。