思路还不算难,关键是链表操作容易出错:
#include <iostream>
#include <assert.h>
struct Node{
Node(int value)
: m_Value(value)
, m_pNext(NULL)
{
}
int m_Value;
Node* m_pNext;
};
Node* CreateNode(int n){
Node* node = new Node(0);
Node* pCurNode = node;
for (int i = 1; i < n; ++i){
Node* pNewNode = new Node(i);
assert(NULL != pNewNode);
pCurNode->m_pNext = pNewNode;
pCurNode = pNewNode;
}
return node;
}
void DeleteNode(Node*& pNode){
Node* tempNode = pNode;
while(tempNode){
Node* nextNode = tempNode->m_pNext;
delete tempNode;
tempNode = nextNode;
}
}
bool FindKNode(Node* pNode, int k){
Node* pPreKNode = pNode;
Node* curNode = pNode;
int i = k;
while (--k ){
curNode = curNode->m_pNext;
if (NULL == curNode){
printf("error1\n");
return false;
}
}
while (curNode){
curNode = curNode->m_pNext;
pPreKNode = pPreKNode->m_pNext;
}
if (NULL != pPreKNode){
printf("the k node:%d\n", pPreKNode->m_Value);
}
else{
printf("not find\n");
}
}
int main(){
Node* pNode = CreateNode(100);
FindKNode(pNode, 80);
DeleteNode(pNode);
}