给你一个链表的头节点 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]
提示:
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 * 109
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1 通过数组实现
利用另外一个数组存储并输出移动位置后的数组元素
#include <stdio.h>
int main()
{
int i, n;
//输入数组元素个数
scanf("%d", &n);
int a[n];
//依次输入数组元素
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
int k;
//输入移动 k 个位置
scanf("%d", &k);
while(k > n)
{
k %= n;
}
int b[n];
int j;
//对原数组中的每一个数组都进行移动
for(i = 0; i < n; i++)
{
j = k + i;
if(j >= n)
{
j -= n;
}
b[j] = a[i];
}
//输出移动后的数组
for(i = 0; i < n ; i++)
{
printf("%d ", b[i]);
}
}
思路2 通过链表实现