61.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. // ListNode ...
  6. type ListNode struct {
  7. Val int
  8. Next *ListNode
  9. }
  10. func list2str(head *ListNode) string {
  11. curr := head
  12. str := make([]rune, 0)
  13. for curr != nil {
  14. str = append(str, rune(curr.Val+'0'))
  15. curr = curr.Next
  16. }
  17. return string(str)
  18. }
  19. /**
  20. * Definition for singly-linked list.
  21. * type ListNode struct {
  22. * Val int
  23. * Next *ListNode
  24. * }
  25. */
  26. func rotateRight(head *ListNode, k int) *ListNode {
  27. if head == nil || head.Next == nil {
  28. return head
  29. }
  30. dummy := ListNode{0, head}
  31. curr := &dummy
  32. length := 0
  33. for curr.Next != nil {
  34. curr = curr.Next
  35. length++
  36. }
  37. k %= length
  38. if k == 0 {
  39. return dummy.Next
  40. }
  41. fast := &dummy
  42. curr = &dummy
  43. for i := 0; i < k; i++ {
  44. fast = fast.Next
  45. }
  46. for fast.Next != nil {
  47. fast = fast.Next
  48. curr = curr.Next
  49. }
  50. fast.Next = dummy.Next
  51. dummy.Next = curr.Next
  52. curr.Next = nil
  53. return dummy.Next
  54. }
  55. func main() {
  56. l16 := ListNode{6, nil}
  57. l15 := ListNode{5, &l16}
  58. l14 := ListNode{4, &l15}
  59. l13 := ListNode{3, &l14}
  60. l12 := ListNode{2, &l13}
  61. l1 := &ListNode{1, &l12}
  62. fmt.Println(list2str(l1))
  63. fmt.Println(list2str(rotateRight(l1, 0)))
  64. fmt.Println(list2str(rotateRight(l1, 1)))
  65. fmt.Println(list2str(rotateRight(&l16, 2)))
  66. fmt.Println(list2str(rotateRight(&l14, 3)))
  67. fmt.Println(list2str(rotateRight(l1, 4)))
  68. fmt.Println(list2str(rotateRight(&l13, 5)))
  69. fmt.Println(list2str(rotateRight(&l14, 6)))
  70. fmt.Println(list2str(rotateRight(&l14, 7)))
  71. }