# Leetcode - Rotate List

violet posted @ Mar 24, 2020 04:47:07 AM in 算法 with tags Algorithm Golang LinkedList , 45 阅读

https://leetcode.com/problems/rotate-list/

Given a linked list, rotate the list to the right by k places, where k is non-negative.

Example 1:

```Input: 1->2->3->4->5->NULL, k = 2
Output: 4->5->1->2->3->NULL
Explanation:
rotate 1 steps to the right: 5->1->2->3->4->NULL
rotate 2 steps to the right: 4->5->1->2->3->NULL
```

If this is an array problem, it can be solved by reversing the whole array and then reversing each part. But this is a linked list problem, so it can be solved by just iterating the linked list and finding the newHead and newTail. Set newTail.Next to nil and tail.Next = head. And then return newHead

```/**
* type ListNode struct {
*     Val int
*     Next *ListNode
* }
*/
func rotateRight(head *ListNode, k int) *ListNode {
if head == nil || head.Next == nil || k == 0 {
}
size := 1
for node.Next != nil {
node = node.Next
size++
}
//fmt.Println("size: ", size)
if k >= size {
k = k%size
}
if k == 0 {
}
tail := node
j := size - k

for j > 1 {
node = node.Next
j--
}
//fmt.Println("node: ", node)
newTail := node