1、題目:
尋找倒數第m個元素
(來自此書:programming interviews exposed secrets to landing your next job–程式設計師面試攻略)
2、演算法思路:
兩個指標them,p,初始化為頭元素。p指標為遍歷指標,them為位置指標,指向從p指標開始的倒數第m個元素。遍歷開始至them與p相距m個元素後,them與p開始同步前行。
3、**:
#include
#include
typedef struct lnode
lnode;
int initli(lnode **head,lnode **tail) //尾插法
else
th=temp;
}else
}c=getchar();
}*tail=th;
return0;}
void visit(lnode **head)
printf("null\n");
}void delli(lnode **head)
*head=null;}/*
*regular
*the
last
0 is
*tail
*/lnode *findlastm(lnode *head,int
m) else
}return them;
}int main()
printf("linkedlist\n");
visit(&head);
printf("the last %d:\t%c\n",3,findlastm(head,3)->value);
delli(&head);
printf("hello world\n");
return
0;}
4、結果:
倒數第3個
倒數第0個
5、總結:
a. 尋找倒數第m個元素,要立即與指標關聯,指標本來就是指示位置的,不要想著重新建立鍊錶之類,這樣耗時耗空間。
b. p->next!=null的運用,最後倒數是從p開始的,p最後肯定要指向尾元素!
c. 關於null,應該在stdlib.h中有定義了。
d. 尾插法,必須先將尾指標指向具體元素再解引用。
此處主要函式**情況考慮的不是很完整。
reference:
1 5尋找倒數第k個元素
方法一 將單鏈表逆置,變換成尋找正數第k個元素 方法二 快慢指標法,快指標比慢指標快k個節點,當快指標到達尾節點時,慢指標為倒數第k個節點 方法三 順序遍歷兩次鍊錶法,第一次遍歷求出鍊錶長度n,將尋找倒數第k個元素轉換成尋找正數第n k個元素 實現方法二 coding utf 8 author 圖南...
鍊錶中的倒數第m個元素
題目 給定乙個單向鍊錶,請設計乙個既節省時間又節省空間的演算法來找出該鍊錶中的倒數第m個元素。實現這個演算法。倒數第m個元素 是這樣規定的 當m 0時,鍊錶的最後乙個元素 尾元素 將被返回。分析 單鏈表是只能正向遍歷的,並不適合查詢倒數第m個元素,如果需要這類操作,在實際應用中也不會用到單鏈表 也許...
求鍊錶的倒數第m個元素
習題3.5 求鍊錶的倒數第m個元素 20分 請設計時間和空間上都盡可能高效的演算法,在不改變鍊錶的前提下,求鏈式儲存的線性表的倒數第m 0 0 個元素。elementtype find list l,int m 其中list結構定義如下 typedef struct node ptrtonode s...