返回
「前端刷题」61. 旋转链表,将每个节点向右移动k个位置
前端
2023-11-07 19:26:25
前言
在前端开发中,链表是一种常用的数据结构。它由一系列节点组成,每个节点包含一个值和指向下一个节点的指针。链表非常适合存储和处理有序数据,并且具有易于插入和删除元素的优点。
在本文中,我们将学习如何使用 JavaScript 旋转一个链表。链表旋转是指将链表中的每个节点向右移动 k 个位置,其中 k 是一个给定的正整数。例如,如果链表为 [1, 2, 3, 4, 5],并且 k = 2,那么旋转后的链表将变为 [4, 5, 1, 2, 3]。
实现步骤
旋转链表的步骤如下:
- 首先,我们需要找到链表的最后一个节点。我们可以通过遍历链表,直到找到最后一个节点为止。
- 然后,我们需要将最后一个节点的指针指向链表的第一个节点。
- 接下来,我们需要找到链表中距离最后一个节点 k 个位置的节点。我们可以通过遍历链表,直到找到该节点为止。
- 最后,我们需要将找到的节点的指针指向 null,这样就完成了链表的旋转。
代码示例
以下代码演示了如何使用 JavaScript 旋转一个链表:
/*
* Definition for singly-linked list.
*/
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
const rotateRight = (head, k) => {
if (!head || !head.next || k === 0) {
return head;
}
// 找到链表的最后一个节点
let lastNode = head;
while (lastNode.next) {
lastNode = lastNode.next;
}
// 将最后一个节点的指针指向链表的第一个节点
lastNode.next = head;
// 找到链表中距离最后一个节点 k 个位置的节点
let newHead = head;
for (let i = 0; i < k; i++) {
newHead = newHead.next;
}
// 将找到的节点的指针指向 null,这样就完成了链表的旋转
const prevNode = newHead.next;
newHead.next = null;
return prevNode;
};
结语
在本文中,我们学习了如何使用 JavaScript 旋转一个链表。我们首先找到链表的最后一个节点,然后将最后一个节点的指针指向链表的第一个节点,接着找到链表中距离最后一个节点 k 个位置的节点,最后将找到的节点的指针指向 null,这样就完成了链表的旋转。希望这篇博客对你有帮助,如果你有任何问题或建议,请随时留言。