1. 程式人生 > >算法習題---線性表之單鏈表的查找

算法習題---線性表之單鏈表的查找

erro 返回 col 問題 null stat printf .com link

一:問題

已知一個帶頭結點的單鏈表,結點結構為(data,link)假設該鏈表只給出了頭指針list,
在不改變鏈表的前提下,設計一個盡可能高效的算法,查找鏈表中倒數第k個位置上的結點(k為正整數),
若查找成功,算法輸出該結點的data域的值,並返回1,
否則,只返回0。

註意:

這裏的鏈表中沒有給出鏈表長度喲

二:思路

技術分享圖片

技術分享圖片

技術分享圖片

設置兩個指針p、q,分別指向該鏈表的第一個元素(頭結點的下一個元素)和頭結點,一個整數num(初值為1),
p向後移動一個位置num值加1,如果num值大於k,則p,q一起移動,p移動到表尾,q指針指的就是倒數第k個位置上的結點。
如果鏈表結束,q一直是指向頭結點,那麽該結點不存在。

三:代碼實現

Status findElem(LinkList L, int k)
{
    LinkList q, p;
    p = L->next;    //指向第一個
    q = L;
    int num = 1;

    while (p!=NULL)
    {
        p = p->next;
        num++;
        if (num > k)
            q = q->next;
    }
    if (q == L)
        return ERROR;
    printf(
"%d", q->data); return OK; }

算法習題---線性表之單鏈表的查找