题目(2009统考真题):
已知一个带有表头结点的单链表,结点结构为
假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。要求:
(1) 描述算法的基本设计思想
(2) 描述算法的详细实现步骤
(3) 根据设计思想和实现步骤,采用程序设计语言描述算法(使用C或C++或JAVA语言实现),关键之处请给出简要注释。
基本设计思想 :
- 定义两个指针变量p和q;
- 初始时,p和q都指向链表的第一个元素结点(头结点的下一个结点);
- p沿着链表移动,当p指针移动到第k个结点时,q指针开始与p指针同步移动;
- 当p指针移动到最后一个结点时,q指针所指示的结点就是倒数第k个结点(p和q的距离始终为k);
- 以上过程对链表仅进行一遍扫描,时间复杂度为O(n);
算法的详细实现步骤 :
1.int count = 0,p和q指向