题目链接
LeetCode 61. 旋转链表
解题思路
思路主要包括以下几个步骤:
- 找到链表的总长度。
- 计算 k 取余总长度,获取真实移动步数。
- 根据移动步数,打断链表。
- 将打断后的链表重新拼接,然后输出。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
var rotateRight = function(head, k) { if (!head) { return head; } let current = head; let total = 0; while (current) { total++; current = current.next; } k = k % total; if (k === 0) return head; let preNode = head; let newTail = head; for (let i = 0; i < total - k - 1; i++) { newTail = newTail.next; } let newHead = newTail.next; newTail.next = null; current = newHead; while (current && current.next) { current = current.next; } if (current) { current.next = head; } return newHead; };
|
总结
通过以上步骤,我们可以有效地旋转链表,并且处理了链表头的特殊情况。