链表中倒数最后k个结点
作者:互联网
方法1 寄存初始节点
用p寄存初始节点 然后用while算出pHead长度,直接用p前进n-k到需要返回的节点。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
// write code here
int n = 1;
struct ListNode* p = pHead;
//检查初始节点是否为空
if(pHead != NULL)while(pHead->next != NULL){
n++;
pHead = pHead->next;
}
if(n < k)return p = NULL;
else {
for(int i = 0; i < n-k; i++){
p = p->next;
}
return p;
}
}
方法2 双指针法
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
// write code here
if (pHead == NULL)
return NULL;
struct ListNode* first = pHead;
struct ListNode* second = pHead;
//第一个指针先走k步
while (k-- > 0) {
if (first == NULL)
return NULL;
first = first->next;
}
//然后两个指针在同时前进
while (first != NULL) {
first = first->next;
second = second->next;
}
return second;
}
标签:结点,ListNode,struct,int,next,链表,pHead,倒数,NULL 来源: https://blog.csdn.net/weixin_44576259/article/details/120689150