看了上面这个考研专题后,小白经过深思熟虑,可以备份俩个头结点,然后分别进行遍历,因为需要知道倒数第K个结点的地址,所以,当循环遍历时,俩个指针在遍历的时候需要间隔k-1次,所以代码如下:
/*******************************************************************
*
* name : LinkedList_NewNode
* function : 寻找倒数第K个节点,并打印data
* argument : @data 新结点的数据域的数据
* retval : None
* author : [email protected]
* date : 2024/04/22
* note : 此函数不单独使用,需要配合Insert函数使用
*
* *****************************************************************/
bool LinkedList_CountdownDest(LList_t *head,DataType_t k)
{
int i = 0;
if(NULL == head->next) //判断链表是否为空,为空直接退出
{
printf("linkedlist is empty\n");
return false;
}
LList_t *phead = head; // 备份头结点
LList_t *p = head; // 备份头结点
while(phead->next)
{
phead = phead->next; // 遍历链表
if(i >= k-1)
{
p = p->next; //等phead遍历一次以后再参与遍历,寻找循环结束时当前结点的前一个结点
}
i++; //当i = 1时进行遍历
}
printf("%d\n",p->data);
return true;
}
经过测试后,成功得到倒数第K个结点,并打印出来它的data,如有帮助点个关注
标签:结点,遍历,倒数,head,next,链表,phead From: https://www.cnblogs.com/xiaobaibudongjiuwen/p/18152028