算法習題---線性表之單鏈表的查找
阿新 • • 發佈:2018-09-01
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; }
算法習題---線性表之單鏈表的查找