美文网首页
61. Rotate List 旋转链表

61. Rotate List 旋转链表

作者: sarto | 来源:发表于2022-04-10 14:24 被阅读0次

题目

旋转链表

解析

  1. 计算确切的旋转点
    k = k%len
    len - k = newtail
    新的头是 len-k + 1
  2. 斩断这个连接点

伪代码

k = len - k%len
oldh = head
for  k != 0 && t = t.next;k--

h = t.next
oldt.next = oldh

代码

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func rotateRight(head *ListNode, k int) *ListNode {
    if head == nil {
        return head
    }
    l:=1
    oldt := head
    for oldt.Next != nil {
        oldt = oldt.Next
        l++
    }
    k = l - k%l
    if k == l {
        return head
    }
    tail:=head
    for k!=1 {
        tail=tail.Next
        k--
    }
    oldt.Next = head
    head = tail.Next
    tail.Next = nil
    return head
}
image.png

相关文章

网友评论

      本文标题:61. Rotate List 旋转链表

      本文链接:https://www.haomeiwen.com/subject/riyvsrtx.html