您的位置:首页 > 理论基础 > 数据结构算法

查找链表倒数第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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 算法