输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第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;
} void LinkList::Delete(int nData)
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return;
}
if (pHead->pNext == NULL)
{
cout << "链表为空!" << endl;
return;
} LinkNode *pCur = pHead;
while (pCur->pNext)
{
if (pCur->pNext->nValue == nData)
{
LinkNode *pDel = pCur->pNext;
pCur->pNext = pCur->pNext->pNext; pDel->pNext = NULL;
delete (pDel);
}
else
{
pCur = pCur->pNext;
}
}
} void LinkList::Sort()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return;
}
if (pHead->pNext == NULL)
{
cout << "链表为空!" << endl;
} LinkNode *pCur = pHead->pNext;
LinkNode *pPre = pHead; LinkNode *pNewHead = new LinkNode();
while (pCur)
{
LinkNode *pTmp = pCur;
pCur = pCur->pNext; //将pTmp结点插入到pNewHead指向的新链表中
LinkNode *p = pNewHead;
while (p->pNext)
{
if (p->pNext->nValue > pTmp->nValue)
{
break;
}
p = p->pNext;
}
pTmp->pNext = p->pNext;
p->pNext = pTmp;
}
delete pHead;
pHead = pNewHead;
}
bool LinkList::IsEmpty()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return false;
} return pHead->pNext == NULL;
} int LinkList::Length()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return 0;
}
int nLength = 0;
LinkNode *pCur = pHead->pNext;
while (pCur)
{
nLength++;
pCur = pCur->pNext;
} return nLength;
}
void LinkList::Reverse()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
}
if (pHead->pNext == NULL)
{
cout << "链表为空!" << endl;
}
else
{
LinkNode *pCur = pHead->pNext->pNext;
LinkNode *pPre = pHead->pNext;
LinkNode *pnext = NULL; while (pCur)
{
pnext = pCur->pNext;
pCur->pNext = pPre; pPre = pCur;
pCur = pnext;
} pHead->pNext->pNext = NULL;
pHead->pNext = pPre;
}
}
void LinkList::Destroy()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return;
} while (pHead->pNext)
{
LinkNode *pDel = pHead->pNext;
pHead->pNext = pDel->pNext;
delete pDel;
}
delete pHead;
pHead = NULL;
}
LinkNode* LinkList::Find(int nData)
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return NULL;
}
if (pHead->pNext == NULL)
{
cout << "链表为空!" << endl;
return NULL;
} LinkNode *pCur = pHead->pNext;
while (pCur != NULL)
{
if (pCur->nValue == nData)
{
return pCur;
}
} return NULL;
}
void LinkList::Print()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return;
}
if (pHead->pNext == NULL)
{
cout << "链表为空!" << endl;
return;
}
else
{
LinkNode *pCur = pHead->pNext;
while (pCur)
{
cout << pCur->nValue << " ";
pCur = pCur->pNext;
}
cout << endl;
}
}
bool LinkList::IsLoop()
{
if (pHead == NULL)
{
cout << "链表未创建!" << endl;
return false;
}
if (pHead->pNext == NULL)
{
cout << "链表为空!" << endl;
return false;
} LinkNode *pFast = pHead->pNext;
LinkNode *pLow = pHead->pNext; while (pFast != NULL && pLow != NULL && pFast->pNext != NULL)
{
pFast = pFast->pNext->pNext;
pLow = pLow->pNext;
if (pFast == pLow)
{
return true;
}
}
return false;
} LinkNode* LinkList::FindByIndex(int n)
{
if (n <= 0 || n > Length())
{
return NULL;
}
LinkNode *pCur = pHead->pNext;
for (int i = 1; i < n; i++)
{
pCur = pCur->pNext;
} return pCur;
} LinkNode* LinkList::FindLastNum(int n) //使用两个指针 高效操作
{
if (pHead == NULL || pHead->pNext == NULL || n < 0)
{
return NULL;
}
LinkNode *pCur = pHead->pNext;
LinkNode *pFirst = pHead->pNext; while (n > 0)
{
pFirst = pFirst->pNext;
if (pFirst == NULL)
{
return NULL;
}
n--;
}
while (pFirst->pNext)
{
pFirst = pFirst->pNext;
pCur = pCur->pNext;
} return pCur;
}
int main()
{
LinkList list;
list.Insert(12);
list.Insert(14);
list.Insert(2);
list.Insert(122);
list.Insert(5);
list.Insert(4);
list.Insert(7);
list.Print();
int k;
cout << "请输入要查询倒数第几个结点(计数从0开始):";
cin >> k;
LinkNode *p = list.FindByIndex(list.Length() - k);
if (p)
{
cout << p->nValue << endl;
}
LinkNode *p2 = list.FindLastNum(k);
if (p2)
{
cout << p2->nValue << endl;
}
system("pause");
return 0;
}
运行结果如图1所示:
aaarticlea/png;base64,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" alt="" />
图1 运行效果
输入一个单向链表,输出该链表中倒数第K个结点的更多相关文章
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 算法:输入一个链表,输出该链表中倒数第k个结点。
算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...
- 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。
一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...
- 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。
1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...
- 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。
题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...
- 输出单向链表中倒数第k个结点
描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* ...
- [华为]输出单向链表中倒数第k个结点
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_ ...
- 输出单项链表中倒数第k个结点——牛客刷题
题目描述: 输入一个单向链表,输出该链表中倒数第k个结点 输入.输出描述: 输入说明:1.链表结点个数 2.链表结点的值3.输入k的值 输出说明:第k个结点指针 题目分析: 假设链表长度为n,倒数第k ...
- 找出链表中倒数第 k 个结点
/* 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct node { int data; struct node * ...
随机推荐
- 山东省赛J题:Contest Print Server
Description In ACM/ICPC on-site contests ,3 students share 1 computer,so you can print your source c ...
- SpringMVC 学习笔记(一) Hello World
springMVC概述: Spring MVC 是眼下最主流的MVC 框架之中的一个 Spring MVC 通过一套 MVC 注解.让 POJO 成为处理请 求的控制器,而无须实现不论什么接口. 支持 ...
- 文字保护纱-Material Design
Ok,关于这个Material Design 都快被说烂了,他被开发者越来越熟悉的程度,却与市场上的单薄身影形成了鲜明的对比,以至于每当我提及Material Design时就像祥林嫂附身一样. 有些 ...
- Oracle EBS 入门
Oracle EBS 入门Oracle EBS全称是Oracle 电子商务套件(E-Business Suit),是在原来Application(ERP)基础上的扩展,包含ERP(企业资源计划管理). ...
- HDFS Architecture--官方文档
HDFS Architecture Introduction The Hadoop Distributed File System (HDFS) is a distributed file syste ...
- ajax传值
$(function(){ $.ajax({ url:'order!seatnum.action', data:{ "entity.id":$("input[name=' ...
- Python 时间函数
时间的运用 #coding=utf-8 #!user/bin/python import time import calendar ticks = time.asctime(time.localtim ...
- 关于uploadify 没有显示进度条!!!!
如果你也弄了很久不知道为什么不出现上传进度条!,那就一定要看这里了! 我注释了 queueID 属性后 就出现了!!!!! 就是这么简答! //添加界面的附件管理 $('#file_upload'). ...
- OUTPUT 在insnert delete update 的神奇功效
Inserted deleted 个人理解 应该是两个 临时表 分别存储 变动后的数据集 和 变动前的数据集 使用例子: 1.对于INSERT,可以引用inserted表以查询新行的属性 ...
- Request 获取Url
1.获取页面,HttpContext.Current.Request也是Request //获取当前页面url string myurl = HttpContext.Current.Request.U ...