题目:
输入一个链表,输出该链表中倒数第k个节点。
解法:
1、只遍历一次链表完成。
2、利用两个指针first,second。先让first前进k-1步,之后前移first 和second,放first到达尾节点时候,second即为倒数第k个节点。
3、注意边界和异常的判断:
(一)头节点为空的情况
(二)k取值比链表长度大的情况
代码如下:(通常边界条件的考察可以从下面入手 1.分别考察每一个参数的异常输入 2.联合考察参数的组合异常输入)
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead ==NULL || k==0)
return NULL;
ListNode* first = pListHead;
ListNode* second = pListHead;
for(unsigned i =0;i<k-1;i++)
{
if(first->next!=NULL)
first = first->next;
else
return NULL; //节点个数小于k的情况
}
while(first->next!=NULL)
{
first = first->next;
second = second->next;
}
return second;
}