旋转链表

时间:2021-04-12 11:49:58   收藏:0   阅读:0

技术图片

/**
 * 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 || k==0{
        return head
    }

    var length = 1//链表总长度
    var curr = head
    for curr.Next!=nil{
        length++
        curr = curr.Next
    }

    // 刚好旋转回去
    k = k%length
    if k == 0{
        return head
    }

     // 首先首尾相连成环,找到倒数第k+1个节点,成为新的头节点
    curr.Next = head
    for i:=0;i<length-k;i++{
        curr = curr.Next
    }

   // curr此时指向新的尾节点
    newHead := curr.Next//新的尾节点的下一个节点即为新的头节点
    curr.Next = nil//断尾
    return newHead

}
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!