旋转链表
要求:
给一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
思路
举例一个链表为1->2->3->4->5
k值为2,则从3->4处断开,链表变为
原先链表的尾节点5,下一节点为null
旋转后,5的下一节点为1
可以将链表首位相连,即
再从length - k%length -1 处断开
即可返回旋转后的链表
代码
var rotateRight = function (head, k) {
// 当传进来的值为空,直接return
if (!head) return null;
let cur = head,
pre = head,
size = 1;
// 使用while找到链表最后一个节点,并且保存链表的长度
while (cur.next) {
size += 1;
cur = cur.next;
}
// while出来后,cur指向链表的最后一个节点,然后将链表首位相连
cur.next = head;
// 相连后,找到该断开的点
// 举例:输入1->2->3->4->5,k=2,输出4->5->1->2->3
// 即从3处断开,k=2,size=5,
for (let i = 0; i < size - k % size -1; i++) {
pre = pre.next;
}
let list = pre.next;
pre.next = null;
return list;
};