题解 | #链表中倒数最后k个结点#
链表中倒数最后k个结点
https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
// 先把长度定好,进行平移
struct ListNode* ptTail = pHead;
struct ListNode* ptHead = pHead;
// 先把头往前面走K位
int i = 0;
for (i = 0; i < k; i++)
{
// 如果头往前走的过程中为NULL了,那证明链表结点没有那么多个,直接返回空链表
if (ptHead == NULL)
{
return ptHead;
}
ptHead = ptHead->next;
}
// 再头尾一起走,头到NULL了,头尾相隔刚好K个结点
while (ptHead != NULL)
{
ptHead = ptHead->next;
ptTail = ptTail->next;
}
return ptTail;
}
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
struct ListNode* ptTail = pHead;
struct ListNode* ptHead = pHead;
// 计算总的长度
int len = 0;
while (NULL != ptHead)
{
ptHead = ptHead->next;
len++;
}
// 总长度减去目标长度得出需要偏移的长度
int tmp = len - k;
if (tmp < 0)
{
return ptHead;
}
// 根据需要偏移的长度位数进行偏移
while (tmp > 0)
{
ptTail = ptTail->next;
tmp--;
}
return ptTail;
}
