61. 旋转链表
旋转链表
题目描述:
给你一个链表的头节点 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
思路:
时间复杂度:O(n),空间复杂度O()
用快慢指针找到倒数第k个
代码:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func rotateRight(head *ListNode, k int) *ListNode {
if head == nil{
return head
}
tmp := head
i := 0
for tmp!= nil{
i++
tmp = tmp.Next
}
k = k%i
if k == 0{
return head
}
slow,quick := head,head
for i:=0;i<k;i++{
quick = quick.Next
}
for quick.Next != nil{
quick = quick.Next
slow = slow.Next
}
next := slow.Next
slow.Next = nil
quick.Next = head
return next
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.4 MB, 在所有 Go 提交中击败了60.78%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!