6 3 刪除單鏈表中最後乙個與給定值相等的結點

2021-10-09 20:23:05 字數 1796 閱讀 5529

本題要求在鍊錶中刪除最後乙個資料域取值為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 ...