给你一个链表的头节点 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
实战:
struct ListNode* rotateRight(struct ListNode* head, int k) { if(head==NULL||k==0)return head; struct ListNode*node=head; int i=0; while (head->next){ head=head->next; i++; } if (k==i)return head; node->next = head; //将链表连起来变成循环的,一会再切割 int index = i - k % i; //计算头结点最终位置 node = head; while (--index) node = node->next; head = node->next; //找到新的头结点 node->next = NULL; //切断尾部与头部 return head; //返回新的头结点 }