假设链表只给出了头指针 head。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第 k (k 为正整数) 个位置上的结点。若查找成功,算法输出该结点的 data 值,并返回 1;否则,只返回 0。

* ==============================================================
 * File name:        find_kth_from_end.c
 * Author:           3360652783@qq.com
 * Date created:     2026-07-23
 * Description:      Find the kth node from the end in a singly linked list with head node.
 * Copyright notice: All right Reserved
 * ==============================================================

//构建用于查找链表倒数第k个结点的算法
int search_kth_last(*L,int k){
    int j = 0;
    LinkList_t *P1 = L;
    LinkList_t *p2 = L;
    if( L->next ==NULL ){            //如果是空链表则查找失败,返回0
        return 0;
    }
    p1 == L->next;
    for(int i=1;i<=k;i++){                    //将指针p2指向链表第k个结点
        if( p2->next == NULL && j != k  ){    //如果结点数不足k个,则查找失败(除去头结点)
            return 0;
        }
        p2 = p2->next;
        j++;
    }
    while( p2->next !=NULL ){                 //将p1、p2同步向后移动并保持k个结点的距离,直到p2指向尾结点
        p1 = p1->next;
        p2 = p2->next;
    }
    printf("倒数第%d个结点的值为%d",k,p1->data);     //打印倒数第k个结点的数据并返回1
    return 1;
}
posted @ 2026-07-23 14:40    阅读(2)  评论(0)    收藏  举报