倒数链表

image-20240422214255372

看了上面这个考研专题后,小白经过深思熟虑,可以备份俩个头结点,然后分别进行遍历,因为需要知道倒数第K个结点的地址,所以,当循环遍历时,俩个指针在遍历的时候需要间隔k-1次,所以代码如下:

/*******************************************************************
*
*	name	 :	LinkedList_NewNode
*	function :  寻找倒数第K个节点,并打印data
*	argument :  @data 新结点的数据域的数据
*	retval	 :  None
*	author	 :  yq_dyx@163.com
*	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,如有帮助点个关注

posted @ 2024-04-23 08:51  不懂小白在线记录  阅读(7)  评论(0)    收藏  举报