题目
输入一个链表,输出该链表中倒数第 kk 个结点。
注意:
k >= 1;- 如果 kk 大于链表长度,则返回 NULL;
数据范围
链表长度 [0,30][0,30]。
样例
输入:链表:1->2->3->4->5 ,k=2
输出:4
解析
两次遍历,第一次遍历算链表总长度n,如果 k > n, 返回nullptr。第二次遍历,令t1、t2 = pListHead先让t2走k步,然后t1,t2同时走,直到t2=nullptr,此时t1就为所求。
代码
GO
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func findKthToTail(pListHead *ListNode, k int) *ListNode {
n := 0
for l := pListHead; l != nil; l = l.Next {
n ++
}
if n < k {
return nil
}
t1, t2 := pListHead, pListHead
for k > 0{
t2 = t2.Next
k --
}
for t2 != nil {
t1 = t1.Next
t2 = t2.Next
}
return t1
}