61.go 1.4 KB

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