本函数功能为将查找单链表中的倒数第k个结点将其data输出
<! -- RevCount.c文件(查找单链表中的倒数第k个结点将其data输出)的实现 -->
/*****************************************************************************
*
* func name : LinList_RevCount
* function : 将查找单链表中的倒数第k个结点将其data输出
* argument :
* @*Head :单链表的头结点
* @ K :指定倒数结点位置
*
* retval : bool(true or false)
* note : None
* author : [email protected]
* date : 2024/04/23
* history :
* version : V1.0
*
******************************************************************************/
bool LinList_RevCount(LinList *Head, int k)
{
LinList *Bhead = Head;
LinList *Chead = Head;
LinList *temp;
int i = 0;
int z = 0;
if (Head->next == 0)// 判断传进的链表是否为空
return false;
while (Bhead->next)// 遍历一遍链表,统计除了头结点外结点的个数
{
Bhead = Bhead->next;
i++;
}
while (Chead->next)// 找到倒数第k个结点的位置
{
if (z == (i - k))
break;
Chead = Chead->next;
z++;
}
temp = Chead->next;
printf("The reciprocal %d node's data is %d\n", k, temp->data);// 输出倒数第k个结点的data值
return true;
}
<! -- 主函数的实现 -->
/*******************************************************************************************
* file name : RevCount
* author : [email protected]
* date : 2024/04/23
* function : 将查找单链表中的倒数第k个结点将其data输出
* note : None
*
* CopyRight (c) 2024 [email protected] All Right Reseverd
* ******************************************************************************************/
int main()
{
int i;
LinList *head = LinList_Creat();// 创建链表
LinList_HeadAdd(head, 10);
LinList_TailAdd(head, 18);
LinList_MidAdd(head, 10, 2);
LinList_MidAdd(head, 2, 15);
LinList_MidAdd(head, 15, 16);
LinList_Print(head);// 遍历一遍链表并输出当前的链表
i = LinList_RevCount(head, 3);// 显示倒数第k的结点的值为多少
printf("%d\n", i);// 显示返回值
}
<! -- 使用到的函数有:
LinList_HeadAdd(LinList *Head, Datatype_t data)(头插函数)
LinList_MidAdd(LinList *Head, Datatype_t Destdata, Datatype_t data)(使用中间指定位置插入函数)
LinList_TailAdd(LinList *Head, Datatype_t data)(尾插函数)
LinList_Print(LinList *Head)(遍历链表并输出函数)
-->