输入一个链表,输出该链表中倒数第K个结点。注:链表的尾结点是倒数第一个结点。
思路一:
遍历一遍链表,求出链表的长度。
正数 = 长度 - 倒数 + 1
如图所示:
然后遍历正数的次数,便得到了倒数第K个结点。但是这种方法需要遍历链表两次。
思路二:
遍历一次可以用快慢指针解法,即定义两个指针,快指针和慢指针,求倒数第K个:结点快指针先走K-1步,然后快慢指针一起走当快指针走到结尾,慢指针所指向的就是所求结点。
代码如下:
template<class T>
struct ListNode
{
T _value;
ListNode<T>* _next;
ListNode(const T& value)
:_value(value)
,_next(NU