目录
注意*****这里使用快慢指针时间复杂度更低,让快指针先走k步,然后俩个指针一起走,快指针走到尾,慢指针就指向倒数第k个节点了。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pListHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
// write code here
//***********个别测试用例通过时,尽力去想极端情况。
struct ListNode*cur=pListHead;
if(pListHead==NULL)
return NULL;
int n=0;
while(cur) //求出链表长度。
{
n++;
cur=cur->next;
}
int endk=n-k;
if(n>=k) //这里的等于相当于是倒数到正数第一了。
{
//k小于等于链表长度
while(endk)
{
endk--;
pListHead=pListHead->next;
}
}else return NULL; //k大于链表长度时。
return pListHead;
}