//腾讯的面试题 2015-04-14
//转载自:http://blog.chinaunix.net/uid-23629988-id-2169046.html?page=2
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
//建立一个链表
struct Node
{
int data;
Node *next;
};
//函数功能创建一个链表,并顺序的输出所有值
void CrateLink(Node *&head ,const int n)
{
head = new Node;
head->next = NULL;
head->data = rand()%10000;
Node *p ,*pr;
p = head;
pr = p;
int i = n;
i --;
while(i--)
{
p->next = new Node;
pr = p->next;
p = pr;
pr->next = NULL;
pr->data = rand()%10000;
}
p = head;
while(NULL != p )
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
/*
参数解释
head 表示链表的头
pos 表示倒数第pos个值
d 表示包含返回值的节点
算法的思想就是 利用两个指针 ret 和 head,
这两个指针之间的关系是 head指向的节点大于ret指向的节点 pos个值,即两个指针相差pos个节点
当head指向最后一个值时,ret就为倒数第pos个节点
*/
void find(Node *head,int pos,Node &d) //找到倒数第pos个值
// 注意pos的值和数组的下标的意义是一样的,第0个就是array[n]
{
int i = 0;
Node *ret = head;
while(i<pos && head != NULL) //head向后移动pos个节点,同时检查链表的值是否满足个数
{
head = head->next;
i++;
}
if(head == NULL ) //检查链表是否有 倒数第 pos个节点
return ;
while(head->next != NULL)
{
ret = ret->next;
head = head->next;
}
d.data = ret->data;
}
int main()
{
Node *head =NULL ;
CrateLink(head ,10);
Node d;
find(head,2,d); //显示倒数第 2 个节点
cout << d.data << endl;
return 0;
}
算法实现:返回单链表的倒数第pos个节点
最新推荐文章于 2022-09-14 16:49:30 发布