个人思路总结:
这道题的难点就是如何找到那个旋转点。步骤如下:
1、遍历链表,保存长度(count)
2、找到分割点(k%count),然后将尾部向前数第K个元素作为头,原来的头接到原来的尾上
代码如下:
/**
* 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==nullptr||k==0)
return head;
int count = 1;
ListNode* tmp = head;
ListNode* newend = head;
ListNode* newhead = head;
while(tmp->next!=nullptr)
{
count++; //链表长度
tmp = tmp->next; //退出循环后,tmp即为链表最后一个元素(并非nullptr)
}
k = k % count; //k为从后往前数的第几个元素作为链表新表头
while(count-k-1)
{
newend = newend->next; //newend为前部分的最后一个元素
k++;
}
tmp->next = newhead;
newhead = newend->next;
newend->next = nullptr;
return newhead;
}
};