剑指offer--面试题15

时间:2023-03-09 18:30:43
剑指offer--面试题15

题目:打印单向链表中倒数第k个节点

以下为自己所写代码,未经过验证,只是写个思路。。。

#include<iostream>
#include<vector>
#include<exception> using namespace std;
//节点定义
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
}; void FindKthToTail(ListNode* pHead, unsigned int k)
{
if(pHead == NULL)
throw new std::exception("Invalid parameters!"); std::vector<int> Values;
ListNode* pNode = pHead; while(pNode != NULL)
{
Values.push_back(pNode->m_nValue);
pNode = pNode->m_pNext;
} if(k > Values.size())
throw new std::exception("Invalid parameters!");
else
std::cout<<Values[Values.size() - k]<<std::endl; }

如果不允许使用vector,则另想办法:用具有某种限制的两个指针进行一次遍历即可!

自己所写代码如下:

ListNode* FindKthToTail(ListNode* pHead, unsigned int k)
{
if(pHead == NULL || k <= )
return NULL;
int index = ;
ListNode* pNode = pHead;
while(i <= k && pNode != NULL)
pNode = pNode->m_pNext;
if(pNode == NULL)
return NULL;
else
{
ListNode* pNodeFollow = pHead;
while(pNode->m_pNext != NULL)
{
pNode = pNode->m_pNext;
pNodeFollow = pNodeFollow->m_pNext;
}
} return pNodeFollow; }

错误处理后,均return NULL;

让防御性编程成为自己的习惯!