错误代码
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead == NULL || k == )
return NULL;
ListNode* p1 = pListHead;
ListNode* p2 = pListHead;
for(int i = ;i < k;i++){
p1 = p1->next;
}
while(p1->next != NULL){
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
};
会报“段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起”
因为k的数字可能大于整个链表的长度,这时p1可能指向空指针,空指针的next就会报错
如果去计算一遍整个链表的长度,再判断k与链表长度的大小,这样还是会和笨办法一样遍历两次链表,直接在for循环里添加判断条件只遍历一次链表
正确代码
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead == NULL || k == )
return NULL;
ListNode* p1 = pListHead;
ListNode* p2 = pListHead;
for(int i = ;i < k;i++){
p1 = p1->next;
if(p1 == NULL){
return NULL;
}
}
while(p1->next != NULL){
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
};