鍊錶演算法題目彙總

2021-06-19 08:34:46 字數 1827 閱讀 2202

.已知乙個帶有表頭結點的單鏈表,結點結構為:

data

link

假設該鍊錶只給出了頭指標list,在不改變鍊錶前提下,請設計乙個盡可能高效的演算法,查詢鍊錶中導數第k個位置上的結點(k為正整數)。若查詢成功,演算法輸出為該節點的data域的值,並返回1,;否則,只返回0.要求:

描述演算法的基本設計思想;

描述演算法的詳細實現步驟;

根據設計思想和實現步驟,採用程式語言描述演算法,關鍵之處請給出簡要注釋。

解答:基本設計思想:定義兩個指標p,q,初始時均指向頭結點的下乙個結點,及鍊錶的頭結點。p指標沿著鍊錶移動,當p指向第k個結點時,q指標開始與p指標同步移動,當p指標移動到最後乙個節點時,q指標所指示的結點導數第k個結點。以上過程對鍊錶進進行一遍掃瞄。

基本步驟略寫。

演算法實現**如下:codeblocks12.11+gcc

//查詢倒數第k個結點

typedef int elemtype;

typedef struct lnode

*linklist;

int search_k(linklist listhead ,int k)

if (count < k)

else

}

題目:已知乙個帶有頭結點的單鏈表,設計乙個高效演算法實現該單鏈表的逆轉演算法。

解答:演算法說明:略

演算法實現**:

linklist linkreverse(linklist listhead)

linklist tmp = null,

pre = null,

cur = listhead -> link;

while(cur != null)

listhead ->link = pre;

return listhead;

}

執行環境codeblocks12.11 +gcc

#include #include typedef int elemtype;

typedef struct lnode

*linklist;

/*查詢倒數第k個結點*/

int search_k(linklist listhead ,int k)

if (count < k)

else

}/* 鍊錶逆轉 */

linklist linkreverse(linklist listhead)

linklist tmp = null,

pre = null,

cur = listhead -> link;

while(cur != null)

listhead ->link = pre;

return listhead;

}int main()

else

}linklist listhead = (linklist) malloc( sizeof(struct lnode) );

listhead -> link = listnode[9];

linklist tmp = listhead -> link ;

while(tmp != null)

printf("\n");

linkreverse(listhead);

tmp = listhead -> link ;

while(tmp != null)

printf("\n");

search_k(listhead, 1);

return 1;

}

Leetcode 鍊錶題目

鍊錶是個線性資料結構 由零個或多個資料元素組成的有限序列 第乙個元素無前驅,最後乙個元素沒有後繼,其餘元素乙個前驅乙個後繼 leetcode 160 找出兩個鍊錶的交點 本題中要找出兩條鍊錶的交點,首先要知道鍊錶的特性,下乙個節點的位置只能由上乙個節點來確定,所以不能直接確定某個值得特定的位置,因此...

鍊錶專題彙總

排序兩個鍊錶 一文搞懂鍊錶 前言 之前考研的時候因為基礎不紮實,所以演算法題大多靠背,but 熟練度是一方面,總結方法也要跟上,這樣才能起到舉一反三的效果。tips 如果不知道思路,可以先舉乙個例子模擬一下 1 虛擬頭節點 建乙個虛擬節點更讓容易表示節點,這樣鍊錶的每個節點都是公平的,對於空鍊錶也更...

常用演算法題目總結三(鍊錶篇)

只遍歷一次鍊錶時如何實現呢?示例 templatestruct node 鍊錶節點 template void printlist node head 列印鍊錶 cout endl templatenode constructlist int n 構造鍊錶 return head templaten...