目录
1. 思路1:倒数第K个节点,就是整数第N-K+1的节点
2. 思路2:快慢指针
1. 思路1:倒数第K个节点,就是整数第N-K+1的节点
链表中,一共有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;
}
2. 思路2:快慢指针
这里我们定义快指针fast,慢指针slow,让快指针先走k步,然后快慢指针同时走,当快指针等于NULL时,slow指针指向的节点就是倒数第K个节点
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code herestruct 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;
}