问题描述
具体问题描述请看 leetcode
解题思路
-
整体思路
1.1. 把链表变成环状链表
1.2. 然后旋转到指定位置
1.3. 重新设置头指针
1.4. 最后断开环 -
图解
2.1:第一步
2.2 第二步
2.3 第三步
代码实现
func rotateRight(head *ListNode, k int) *ListNode {
// 如果是空链表直接返回
if head == nil {
return head
}
// 复制头指针
cur := head
// 链表长度
size := 1
// 找到尾节点,记录链表长度
for cur.Next != nil{
cur = cur.Next
size++
}
// 串成环
cur.Next = head
// 旋转环
for i := 0; i < size - 1 - (k % size); i++ {
head = head.Next
}
// 切换头指针
cur = head.Next
// 切断环
head.Next = nil
return cur
}