package main import "fmt" type ListNode struct { Val int Next *ListNode } func main() { } func removeNthFromEnd(head *ListNode, n int) *ListNode { if head.Next == nil && n == 1 { return nil } firstNode := (*ListNode)(nil) result := (*ListNode)(nil) preNode := (*ListNode)(nil) for head != nil { fmt.Printf("1----") if preNode != nil { fmt.Printf("preNode:%d|", preNode.Val) if firstNode == nil { firstNode = preNode result = preNode } else { result.Next = preNode result = result.Next } } tmp := head tmp2 := &ListNode{Val: tmp.Val} value := 0 for i := 0; i < n; i++ { if tmp.Next != nil { tmp = tmp.Next value++ } else { break } } fmt.Printf("%d", value) if value == n-1 { fmt.Printf("找到,") preNode = nil head = head.Next continue } preNode = tmp2 head = head.Next } if preNode != nil { fmt.Printf("preNode:%d|", preNode.Val) if firstNode == nil { firstNode = preNode result = preNode } else { result.Next = preNode result = result.Next } } return firstNode }