双指针,一根指针先走k步(边走边判断是否为空,因为链表长可能小于k),最后两根指针一起走,前面那根指针为空时后面的指针所指即为所求
func FindKthToTail( pHead *ListNode , k int ) *ListNode { // write code here if pHead == nil { return nil } head, p1, p2 := pHead, pHead, pHead lenList := 0 for head != nil { head = head.Next lenList++ } if k > lenList { return nil } for i := 0; i < k; i++ { p2 = p2.Next } for p2 != nil { p1 = p1.Next p2 = p2.Next } return p1 }
原文:https://www.cnblogs.com/dingxiaoqiang/p/14630293.html