這個演算法已經有不少人寫過了,但是為了考研後期複習還是在此記錄一下自己的心得。
方法有如下幾種:
1、 遍歷單鏈表兩次,第一次獲取鍊錶總長度,第二次尋找倒數第k個元素就很簡單了。但是該方法需要遍歷兩次鍊錶。
2、 遍歷單鏈表並記錄長度,將每個元素存入順序表中,然後通過下標獲取倒數第k個元素。該方法只需遍歷一次鍊錶,但是需要額外的儲存空間。
3、 既然是倒數第k個元素,那麼只要從後往前數k個不就行了。但是又是單鏈表,獲取不到前驅節點。不過,並不需要獲取每乙個元素的前驅節點,只需要定義兩個指標,乙個指向最後乙個元素,另乙個在它前面k個位置即可。而如何實現呢?
一開始,兩個指標都指向第乙個元素,但是如果它們之間的距離小於k,那麼只移動第乙個指標。而當他們之間的距離等於k後,兩個指標一起後移,這樣在第乙個指標指向鍊錶最後乙個元素的時候,第二個指標就指向的是倒數第k個元素。
只需要一次遍歷,不需要額外空間。
**:
typedef int elemtype;
typedef struct lnode
lnode,*linklist;
int search_k(linklist list, int k)
if(count < k)
return
0; //陣列長度print(q->
data); //輸出q的值
return
1;}
「吟遊」程式人生——yinyoupoet
輸出單鏈表的倒數第K個節點
求解單鏈表第k個節點或者倒數第k個節點總是乙個o n 的問題!一般的求解倒數第k個問題是轉換為求解第n k個節點的問題,這樣需要求出鍊錶總長n,實際上可以做的更好!求解倒數第k個節點更好的一種做法是不求解鍊錶長度,使用乙個指標指向第k個節點,另乙個指標指向第乙個節點,兩個指標同步移動,當第乙個指標移...
找出單鏈表的倒數第k個元素
一 思路 有兩個指標分別向linklist,它們分別是 low,height 先是height先向前移動k個位置,然後low和height一起向前移動,一直到height到達鍊錶的末尾,這是low所指的位置就是倒是第k個元素,考慮到的邊界值有k 1或者k linklist的長度的時候或者linkli...
如何尋找單鏈表倒數第K個元素
如下是乙個帶頭結點的單鏈表結構 typedef struct node node typedef struct linklist linklist 假設單鏈表中有n個元素,尋找倒數第k個元素,也就是尋找單鏈表中正數的第n k個元素,但是這個n是未知的。首先我們定義乙個結點的結構體指標 p讓其指向頭結...