输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下:
#include <iostream>
using namespace std;
struct LinkNode
{
public:
LinkNode(int value = 0) : nValue(value){ pNext = NULL; }
~LinkNode() { pNext = NULL; }
//private:
friend class LinkList;
int nValue;
LinkNode *pNext;
};
//带头结点的链表
class LinkList
{
public:
LinkList();
~LinkList();
void Insert(int nData); //插入元素
void Delete(int nData); //删除元素
void Sort(); //排序
bool IsEmpty(); //判断是否为空
void Reverse(); //反转
void Destroy(); //销毁整个链表
int Length(); //链表长度
LinkNode* Find(int nData); //查找元素
bool IsLoop(); //判断是否为环
void Print(); //打印链表
LinkNode *FindByIndex(int n); //返回链表中第i个元素
LinkNode *FindLastNum(int n); //使用两个指针 高效操作
private:
LinkNode *pHead;
};
LinkList::LinkList()
{
pHead = new LinkNode();
}
LinkList::~LinkList()
{
Destroy();
}
//从大到小插入
void LinkList::Insert(int nData)
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return;
}
LinkNode *pCur = pHead;
while (pCur->pNext != NULL)
{
if (pCur->pNext->nValue < nData)
{
break;
}
pCur = pCur->pNext;
}
LinkNode *pTmp = new LinkNode(nData);
pTmp->pNext = pCur->pNext;
pCur->pNext = pTmp;