目录

链表中,一共有N个节点,如果我们想要得出倒数第K个节点,我们就可以简单理解为正数第N-K+1的节点。但因为需要多重判断,这里更推荐第二种方法,即快慢指针。
- struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
- int n =0;
- struct ListNode* cur = pListHead;
- //判断是否为链表是否为空
- if(pListHead == NULL)
- {
- return NULL;
- }
-
- while(cur)
- {
- n++;
- cur = cur->next;
- }
- //检查k是否超出界限
- if(k > n)
- {
- return NULL;
- }
-
- n = n-k;
- while(n--)
- {
- pListHead = pListHead->next;
- }
- return pListHead;
- }
这里我们定义快指针fast,慢指针slow,让快指针先走k步,然后快慢指针同时走,当快指针等于NULL时,slow指针指向的节点就是倒数第K个节点

- struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
- // write code here
- struct ListNode* fast = pListHead;
- struct ListNode* slow = pListHead;
- while(k--)
- {
- if(fast == NULL)
- {
- return NULL;
- }
- fast = fast->next;
- }
- while(fast)
- {
- fast = fast->next;
- slow = slow->next;
- }
- return slow;
- }
