Golang | Leetcode Golang题解之第61题旋转链表
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func rotateRight(head *ListNode, k int) *ListNode {
if head == nil {
return nil
}
// 计算链表长度
length := 1
current := head
for current.Next != nil {
current = current.Next
length++
}
// 计算旋转次数
rotateTimes := length - k%length
if rotateTimes == length {
return head
}
// 找到旋转起始点的前一个节点
current.Next = head
for i := 0; i < length - rotateTimes - 1; i++ {
current = current.Next
}
// 新的头节点是旋转起始点的下一个节点
newHead := current.Next
current.Next = nil
return newHead
}
这段代码首先检查了链表是否为空,并计算了链表的长度。然后根据需要旋转的次数计算出实际需要旋转的次数,以防k大于链表长度时。接着找到新的头节点,并将整个链表形成一个环,最后断开环的部分并返回新的头节点。
评论已关闭