找出单链表中倒数第k个位置上的节点
问题描述:已知一个带头节点的单链表,节点结构为{int data, node* next}, 假设该链表只给出了头指针list, 在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的节点。若查找成功,输出该节点的data域元素值,并返回1;否则,返回0.
分析:定义两个指针变量p和q, 初始时均指向首节点(头节点的下一个节点)。先让p沿着链表向后移动,并用计数器cnt进行计数,当p指向第k个节点(即k == cnt)时,使q从第一个节点开始与p指针向后同步移动。当p指向最后一个节点时,q指向的节点就是倒数第k个节点。
步骤:
- 令p和q均指向链表的首节点,令cnt = 0
- 若p为NULL,转向步骤5
- 若cnt == k, 则令q指向下一个节点;否则,使cnt += 1
- 令p指向下一个节点,转向步骤2
- 若cnt == k, 则查找成功,输出该节点的data域的元素值,并返回1;否则,表示查找失败,返回0
#include <iostream>
using namespace std;
typedef struct node
{
int data;
node* next;
} listNode, *linkList;
bool search_k_reverse(linkList, int