题目
输入一个链表,输出该链表中倒数第k个结点。
链接:链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)
题解
设置2个指针fast和slow,让fast先往后走k步,然后slow和fast同时向后移动,当fast指向空指针时,slow指向倒数第k个结点。注意,当链表为空时或者当k大于链表长度时,应当返回空指针,所以在while循环体一开始首先判断fast是否为空,若为空则返回NULL,否则程序继续。
代码入下:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) { // write code here struct ListNode* slow = pListHead; struct ListNode* fast = pListHead; while (k--) { if (fast == NULL) return NULL; fast = fast->next; } while (fast) { slow = slow->next; fast = fast->next; } return slow; }