請設計時間和空間上都盡可能高效的演算法,在不改變鍊錶的前提下,求鏈式儲存的線性表的倒數第m(>0)個元素。
函式介面定義:
elementtype find
( list l,
int m )
;
其中list結構定義如下:
typedef
struct node *ptrtonode;
struct node
;typedef ptrtonode list;
/* 定義單鏈表型別 */
l是給定的帶頭結點的單鏈表;函式find要將l的倒數第m個元素返回,並不改變原鍊錶。如果這樣的元素不存在,則返回乙個錯誤標誌error。
裁判測試程式樣例:
#include
#include
#define error -1
typedef
int elementtype;
typedef
struct node *ptrtonode;
struct node
;typedef ptrtonode list;
list read()
;/* 細節在此不表 */
void
print
( list l )
;/* 細節在此不表 */
elementtype find
( list l,
int m )
;int
main()
/* 你的**將被嵌在這裡 */
輸入樣例:
512
4563
輸出樣例:41
2456
思路:因為單鏈表而且要從後往前數(2333比較煩逆序一類的題目),首先要把鏈結點個數給求出來,(本道題比較特殊,雖然有頭結點,但做完題之後發現可以不用考慮頭結點的問題。)然後再把通過計數找到順序題目要求的鏈結點元素。
elementtype find
( list l,
int m )
//此步以上都是測得鍊錶元素數量
temp = l->next;
count = count-m+1;
int judge =0;
int get;
while
(temp)
temp = temp->next;
}return error;
}
求鍊錶的倒數第m個元素
習題3.5 求鍊錶的倒數第m個元素 20分 請設計時間和空間上都盡可能高效的演算法,在不改變鍊錶的前提下,求鏈式儲存的線性表的倒數第m 0 0 個元素。elementtype find list l,int m 其中list結構定義如下 typedef struct node ptrtonode s...
求鍊錶的倒數第m個元素
方法一 先遍歷一次鍊錶,得到長度n,在從頭遍歷找到第n m 1個元素。elementtype find list l,int m if m n m的位置不合法 int i 1 p l for i n m 1 i p p next return p data 方法二 定義兩個指標變數p1,p2,在初始...
求鍊錶的倒數第m個元素
習題3.5 求鍊錶的倒數第m個元素 20 分 請設計時間和空間上都盡可能高效的演算法,在不改變鍊錶的前提下,求鏈式儲存的線性表的倒數第m 0 個元素。elementtype find list l,int m 其中list結構定義如下 typedef struct node ptrtonode st...