61.旋转链表
md
给你一个链表的头节点 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 * 109go
func rotateRight(head *ListNode, k int) *ListNode {
if head == nil || head.Next == nil || k == 0 {
return head
}
dummyHead := &ListNode{Next: head}
tail := dummyHead.Next
n := 1 //这里为啥是 1?因为包括了头节点
for tail.Next != nil {
n++
tail = tail.Next
}
if k%n == 0 {
return head
}
kNode := dummyHead
for step := n - k%n; step > 0; step-- {
kNode = kNode.Next
}
tail.Next = head
dummyHead.Next = kNode.Next
kNode.Next = nil
return dummyHead.Next
}