19.go 952 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type ListNode struct {
  6. Val int
  7. Next *ListNode
  8. }
  9. func list2str(head *ListNode) string {
  10. curr := head
  11. str := make([]rune, 0)
  12. for curr != nil {
  13. str = append(str, rune(curr.Val+'0'))
  14. curr = curr.Next
  15. }
  16. return string(str)
  17. }
  18. /**
  19. * Definition for singly-linked list.
  20. * type ListNode struct {
  21. * Val int
  22. * Next *ListNode
  23. * }
  24. */
  25. func removeNthFromEnd(head *ListNode, n int) *ListNode {
  26. fast, slow := head, head
  27. for i := 0; i < n; i++ {
  28. fast = fast.Next
  29. }
  30. if fast == nil {
  31. return slow.Next
  32. }
  33. for fast.Next != nil {
  34. fast = fast.Next
  35. slow = slow.Next
  36. }
  37. slow.Next = slow.Next.Next
  38. return head
  39. }
  40. func main() {
  41. l15 := ListNode{5, nil}
  42. l14 := ListNode{4, &l15}
  43. l13 := ListNode{3, &l14}
  44. l12 := ListNode{2, &l13}
  45. l1 := &ListNode{1, &l12}
  46. fmt.Println(list2str(removeNthFromEnd(l1, 2)))
  47. l22 := ListNode{2, nil}
  48. l2 := &ListNode{1, &l22}
  49. fmt.Println(list2str(removeNthFromEnd(l2, 2)))
  50. }