一. 迭代
1. 先将链表闭合成环.
2.找到相应的位置断开这个环.
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
//边界条件.
if(head==NULL || head->next==NULL || k==0) return head;
int count=1;
//计算链表长度.
ListNode* tmp = head;
while(tmp->next!=NULL) {
count++;
tmp = tmp->next;
}
//提前讨论模为0的情况,因为不会旋转.
//其实也可以不讨论,因为接下来链表已经成环.
if(k%count==0) return head;
//使链表成环.
tmp->next = head;
//防止k大于链表长度.
int n = k%count;
int i=0;
tmp = head;
while(i!=count-n-1) {
tmp = tmp->next;
i++;
}
//找到新的链表头和尾部.
ListNode* next = tmp->next;
tmp->next = NULL;
return next;
}
};