赞
踩
给你一个链表的头节点 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 通过链表实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。