NOTE
旋转链表
旋转链表的 LeetCode 解题笔记。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置
2. 思路
3. 实现
3.1. 快慢指针
/**
* 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}
length := getLength(head)
if k > length { k = k % length }
if k == 0 {return head}
dummyHead := &ListNode{Next:head}
fast := dummyHead
for i := 0; i < k; i++ {
fast = fast.Next
}
slow := dummyHead
for fast != nil && fast.Next != nil {
fast = fast.Next
slow = slow.Next
}
newHead := slow.Next
slow.Next = nil
fast.Next = dummyHead.Next
return newHead
}
func getLength(head *ListNode) int {
count := 0
for head != nil {
count++
head = head.Next
}
return count
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看