高效的查詢演算法:
找出單向鍊錶的倒數第m個元素
node* findmtolastnode(node* phead, int m)
else
}// 一起繼續遍歷到鍊錶尾部,
// 現在pfind和pcurrent之間間隔了m個元素,
// 所以,當pcurrent遍歷到尾部的時候,
// pfind就到了倒數第m個元素的位置上.
node* pfind = phead;
while (pcurrent)
return pfind;
}
這個演算法果然精妙!空間上只需要開銷兩個臨時變數,時間上只需要迴圈鍊錶一遍,也就是o(n)!
下面還有更加精炒的
//查詢倒數第k個元素並刪除。
void nodetest::removeindexnode(node *head, int k)
p1 = p1->next;
p2 = p2->next;
plast = p2;
c++;
}if (c >= k) else
}
找出單向鍊錶的倒數第m個元素
相對於雙向鍊錶來說,單向鍊錶只能從頭到尾依次訪問鍊錶的各個節點,所以如果要找鍊錶的倒數第m個元素也只能從頭到尾進行查詢,在查詢的過程中,設定兩個指標,其中current指標指向當前訪問的節點,previous指標指向current之前的節點,且兩者之間相距m個節點,這樣,當current指標指向最後...
找出單向鍊錶的倒數第m個元素
相對於雙向鍊錶來說,單向鍊錶只能從頭到尾依次訪問鍊錶的各個節點,所以如果要找鍊錶的倒數第m個元素也只能從頭到尾進行查詢,在查詢的過程中,設定兩個指標,其中current指標指向當前訪問的節點,previous指標指向current之前的節點,且兩者之間相距m個節點,這樣,當current指標指向最後...
找出鍊錶倒數第K個元素
思路 可設兩個頭指標p1和p2,當p2開始向前走,當走的步數為k時,p1開始走,此時當p2走到結尾時,p1所指的位置正好為倒數第k個元素的位置 class listnode override public string tostring return sb.tostring public stati...