题意:
将链表旋转k次,每次旋转表示为1->2->...->N变为N->1->2->...->N-1。
思路:
首先要测链表总长度n,因为k如果比n大,那么旋转整圈是没意义的。
然后求出实际要旋转的次数x,最后就是简单的链表在n-x分割再头尾合并了。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
ListNode *tail;
int n = 0;
for (ListNode *i = head; i != NULL; i = i->next) {
++n;
tail = i;
}
if (n == 0 || k % n == 0) {
return head;
}
k = n - k % n;
ListNode *it = head;
for (int i = 1; i < k; ++i) {
it = it->next;
}
ListNode *ot = it->next;
it->next = NULL;
tail->next = head;
return ot;
}
};