旋转链表
题目
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k **个位置。
分析
输入: head = [1,2,3,4,5], k = 2
输出: [4,5,1,2,3]
我们可以先把链表看成一个环形链表,把最后的尾节点‘5’和头节点‘1’相连
因为k=2,所以把这个环形链接旋转两格,这个时候头节点就变成了‘4’,尾节点就变成了‘3’,最后再把头尾节点断开,就得到了最后移动2个位置后的链表结果。
代码
* 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}
*/
var rotateRight = function(head, k) {
//判断我们的这个节点是不是空的
if(!head) return null;
//找到我们链表的尾节点,串成环,获取到链表的长度
let cur = head, size =1;
while(cur.next) cur = cur.next, size +=1;
cur.next = head;
//找到第size-k个节点,然后将它断开
for(let i =0; i < size - k % size -1; i++){
head = head.next;
}
cur = head.next;
head.next = null;
return cur;
};