本題要求在鍊錶中刪除最後乙個資料域取值為x的節點。l是乙個帶頭結點的單鏈表,函式listlocateanddel_l(linklist l, elemtype x)要求在鍊錶中查詢最後乙個資料域取值為x的節點並將其刪除。例如,原單鏈表各個節點的資料域依次為1 3 1 4 3 5,則listlocateanddel_l(l,3)執行後,鍊錶中剩餘各個節點的資料域取值依次為1 3 1 4 5。
函式介面定義:
void listlocateanddel_l(linklist l, elemtype x);
其中l
是乙個帶頭節點的單鏈表。x
是乙個給定的值。函式須在鍊錶中定位最後乙個資料域取值為x的節點並刪除之。
裁判測試程式樣例:
//庫函式標頭檔案包含
#include
#include
#include
//函式狀態碼定義
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#define null 0
typedef
int status;
typedef
int elemtype;
//假設線性表中的元素均為整型
typedef
struct lnode
lnode,
*linklist;
//鍊錶建立函式
status listcreate_l
(linklist &l,
int n)
return ok;
}//鍊錶輸出函式
void
listprint_l
(linklist l)
while
(p!=
null)}
//下面是需要實現的函式的宣告
void
listlocateanddel_l
(linklist l, elemtype x)
;int
main()
scanf
("%d"
,&x)
;//輸入待查詢元素
listlocateanddel_l
(l,x)
;listprint_l
(l);
return0;
}/* 請在這裡填寫答案 */
輸入樣例:6
1 3 1 4 3 5
3
輸出樣例:1 3 1 4 5
題解:#define null 0
void
listlocateanddel_l
(linklist l, elemtype x)
pre_p = p;
p = p-
>next;}if
(!min_p)
return
; lnode*q = min_p-
>next;
min_p-
>next = q-
>next;
free
(q);
//避免成為野指標
q->next =
null
;}
反轉乙個單鏈表
思路二 反轉乙個鍊錶 示例 結構體定義 先對原鍊錶做頭刪操作,再對新鍊錶做頭插定義乙個新head頭指標,標記為newhead,將它初始為null,並非指向null,最後我們選擇返回這個newhead指標作為新鍊錶的頭指標。定義乙個結點node作為 臨時中轉站 初始化與否並無大影響。進行迴圈遍歷鍊錶各...
定義乙個單鏈表
鍊錶是一種物理儲存結構上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的 鍊錶是由乙個乙個的節點相連線的,每乙個節點都是乙個物件,都有兩個屬性 data,next 根據鍊錶的結構可以分為 1.帶頭 不帶頭 2.單向 雙向 3.迴圈 非迴圈 這些組合起來就有8種結構 編寫乙...
反轉乙個單鏈表
反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?解題心路 迭代好說,遞迴 第一思路將後面的全部翻轉好,再將最後乙個元素的next指向當前。返回最後乙個元素的指標,那就有 當前節點指標 head ...