0061.旋转链表
方法一:快慢指针
时间复杂度 $O(n)$,空间复杂度 $O(1)$,n
表示链表的长度。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func rotateRight(head *ListNode, k int) *ListNode {
if head == nil || head.Next == nil {
return head
}
n, p, q, ans := 0, head, head, head
for ; p != nil; p = p.Next {
n++
}
k, p = k%n, head
for i := 0; i < k; i++ {
p = p.Next
}
for p != nil && p.Next != nil {
p = p.Next
q = q.Next
}
if k != 0 {
ans = q.Next
p.Next, q.Next = head, p.Next
}
return ans
}