1.遇到链表题我们首先画图
如图所示我们旋转k个点,其实就是把后面k个点移到了前面,
2.画出被改变节点所连接的前后的边。以及找出我们需要用的点。
从这里看出我们需要第n-k个点和n-k+1的点,和最后一个点,
如图所示
ok之后我们就开始做题了
步骤:
1.先判断head,k是否为空;
2.求链表的长度,以及尾节点
3.求出第n-k个节点
4.改变他们的指向位置
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head)return head;
int n=0;
ListNode*tail;
for(auto p=head;p;p=p->next){
tail=p;
n++;
}
k%=n;
if(!k)return head;
auto p=head;
for(int i=0;i<n-k-1;i++)p=p->next;
tail->next=head;
head=p->next;
p->next=nullptr;
return head;
}
};