123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package main
- // ListNode ...
- /* type ListNode struct {
- Val int
- Next *ListNode
- } */
- /* func list2str(head *ListNode) string {
- curr := head
- str := make([]rune, 0)
- for curr != nil {
- str = append(str, rune(curr.Val+'0'))
- curr = curr.Next
- }
- return string(str)
- } */
- /**
- * 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 {
- return head
- }
- dummy := ListNode{0, head}
- curr := &dummy
- length := 0
- for curr.Next != nil {
- curr = curr.Next
- length++
- }
- k %= length
- if k == 0 {
- return dummy.Next
- }
- fast := &dummy
- curr = &dummy
- for i := 0; i < k; i++ {
- fast = fast.Next
- }
- for fast.Next != nil {
- fast = fast.Next
- curr = curr.Next
- }
- fast.Next = dummy.Next
- dummy.Next = curr.Next
- curr.Next = nil
- return dummy.Next
- }
- /* func main() {
- l16 := ListNode{6, nil}
- l15 := ListNode{5, &l16}
- l14 := ListNode{4, &l15}
- l13 := ListNode{3, &l14}
- l12 := ListNode{2, &l13}
- l1 := &ListNode{1, &l12}
- fmt.Println(list2str(l1))
- fmt.Println(list2str(rotateRight(l1, 0)))
- fmt.Println(list2str(rotateRight(l1, 1)))
- fmt.Println(list2str(rotateRight(&l16, 2)))
- fmt.Println(list2str(rotateRight(&l14, 3)))
- fmt.Println(list2str(rotateRight(l1, 4)))
- fmt.Println(list2str(rotateRight(&l13, 5)))
- fmt.Println(list2str(rotateRight(&l14, 6)))
- fmt.Println(list2str(rotateRight(&l14, 7)))
- } */
|