题目描述
给定一个列表,将链表向右旋转k个位置,其中k是非负的。例如,
给定1 - > 2 - > 3 - > 4 - > 5 - > NULL和 k = 2,返回4 - > 5 - > 1 - > 2 - > 3 - > NULL。
解题思路
遍历链表,记录链表的长度l,并将原链表的最后一个节点与第一个节点相连
注意k可能会大于len,因此k%=len
将链表在l - k处断开,并将该节点的next指向NULL,
返回地该节点的原next指针
代码示例
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if (!head || k == 0) return head;
ListNode *p = head;
int len = 1;
while (p->next) {
len++;
p = p->next;
}
k=len-k%len;
p->next = head;
for (int i = 0; i < k; i++) {
p = p->next;
}
head = p->next;
p->next = NULL;
return head;
}
};