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 协议 ,转载请注明出处!