给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3]
示例 2:
输入:head = [0,1,2], k = 4 输出:[2,0,1]
思路:可以先将他们看成一个环
代码:
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head) return nullptr;
如果head为空则返回空值
int n=1;
n为记录有多少个节点
ListNode *cur=head;
while(cur->next) cur=cur->next,n++;
遍历节点,n记录个数
cur->next=head;
将cur->next指向头节点
for(int i=0;i<n-k%n;++i){
cur=cur->next;
}
n-k%n:假设为1->2->3->4->5 k=2,n=5,k%n为2,n-k%n为3,代表这链表变成了4->5->1->2->3的形式
head=cur->next;
cur->next为新的头节点
cur->next=nullptr;
断开链表
return head;
}
};