查找链表倒数第K个节点
2016-01-24 21:37
253 查看
查找链表倒数第k个节点的内容,这是个很简单的问题,最直接方法就是先遍历得到链表长度len,然后再遍历一次把第len-k节点读取出来。
代码如下:
void ArrayK(Node *link, int k)
{
int len = 0;
Node *temp = link;
/*遍历得到链表长度*/
while (link != NULL)
{
len++;
temp = temp->Next;
}
int i;
if (k > len)
{
cout << "The value of k is too large!" << endl;
}
else
{ /*再次遍历得到倒数第k个节点*/
for (i = 0; i < len - k; i++)
{
link = link->Next;
}
cout << "The value of k is:" << link->data << endl;
}
}不过上面这种做法并不是最好的,因为要做两次遍历。
我们可以定义两个临时节点,第一个先遍历到第K个节点,然后第二个同时从头结点开始遍历,当第一个节点到尾端的时候,第二个节点即定位到len-k的位置,刚好倒数第k位。
代码如下:
void ArrayK(Node *Link, int k)
{
Node *p, *q;
p = Link;
q = Link;
int count=0;
while (p != NULL)
{
/*进行移位,当p定位到第k位时,q开始前移,*/
if (count < k)
{
count++;
}
else
{
q = q->Next;
}
p = p->Next;
}
if (count < k)
{
cout << "The value of k is too large!" << endl;
}
else
{
cout << "The value of k is:" <<q->data<< endl;
}
}
代码如下:
void ArrayK(Node *link, int k)
{
int len = 0;
Node *temp = link;
/*遍历得到链表长度*/
while (link != NULL)
{
len++;
temp = temp->Next;
}
int i;
if (k > len)
{
cout << "The value of k is too large!" << endl;
}
else
{ /*再次遍历得到倒数第k个节点*/
for (i = 0; i < len - k; i++)
{
link = link->Next;
}
cout << "The value of k is:" << link->data << endl;
}
}不过上面这种做法并不是最好的,因为要做两次遍历。
我们可以定义两个临时节点,第一个先遍历到第K个节点,然后第二个同时从头结点开始遍历,当第一个节点到尾端的时候,第二个节点即定位到len-k的位置,刚好倒数第k位。
代码如下:
void ArrayK(Node *Link, int k)
{
Node *p, *q;
p = Link;
q = Link;
int count=0;
while (p != NULL)
{
/*进行移位,当p定位到第k位时,q开始前移,*/
if (count < k)
{
count++;
}
else
{
q = q->Next;
}
p = p->Next;
}
if (count < k)
{
cout << "The value of k is too large!" << endl;
}
else
{
cout << "The value of k is:" <<q->data<< endl;
}
}
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 数据结构之Treap详解
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解