给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例2:
输入:head = [0,1,2], k = 4
输出:[2,0,1]
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 * 109
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-list
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution
{
public ListNode rotateRight(ListNode head, int k)
{
if (head==null||k==0)
{
return head;
}
ListNode cur = head;
ListNode tail = null;
int listLength = 1;
int moveNum = 0;
while(cur.next!=null) //计算总长度
{
cur=cur.next;
listLength++;
}
cur.next = head;
tail = cur;
cur = cur.next;
moveNum = listLength-k%listLength; //顺时针旋转; 逆时针为k%listLength
for (int i=0; i<moveNum;i++)
{
cur = cur.next;
tail = tail.next;
}
tail.next = null;
return cur;
}
}
此题整体无难度,但需要注意链表数组的旋转方向,由此决定了moveNum是取余还是取余相减。