Description: Given a list, rotate the list to the right by k places, where k is non-negative.
Example:
Given 1->2->3->4->5->NULL and k = 2, return 4->5->1->2->3->NULL.
思路:利用一个快慢指针,找到链表的结尾处,将链表的截尾与头相连形成环,将头指针移动相应的步数。
/**
* 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) {
if(head == NULL || k <= 0)
return head;
int len = 1;
ListNode *tail = head->next;
ListNode *tail_pre = head;
while(tail != NULL)//找到尾部
{
len++;
tail = tail->next;
tail_pre = tail_pre->next;
}
tail_pre->next = head;
int steps = len - (k%len);
//移动头指针
while(steps > 0)
{
head = head->next;
tail_pre = tail_pre->next;
steps--;
}
//处理尾部
tail_pre->next = NULL;
return head;
}
};