1)算法的基本设计思想:
问题的关键是设计一个尽可能高效的算法,通过链表的一趟遍历,找到倒数第k个结点的位置。算法的基本设计思想:定义两个指针变量p和q,初始时均指向头结点的下一个结点(链表的第一个结点)。p指针沿链表移动,当p指针移动到第k个结点时,q指针开始与p指针同步移动;当p指针移动到最后一个结点时,q指针所指示结点为倒数第k个结点。以上过程对链表仅进行一遍扫描。
2)算法的详细实现步骤:
① count=0,p和q指向链表表头结点的下一个结点;
② 若p为空,转⑤;
③ 若count等于k,则q指向下一个结点;否则,count=count+1;
④ p指向下一个结点,转②;
⑤ 若count等于k,则查找成功,输出该结点的data域的值,返回1;否则,说明k值超过了线性表的长度,查找失败,返回0;
⑥ 算法结束。
3)算法实现:
#include<string>
#include<stdio.h>
typedef struct LinkList
{
int data;
struct