單鏈表的刪除

2021-09-23 10:21:06 字數 1143 閱讀 6993

已知單鏈表l含有頭節點,且節點中的元素值以遞增的方式排列。下面的函式deletelist在l中查詢所有值大於mink且小於maxk的元素,若找到,則逐個刪除,同時釋放被刪節點的空間。若煉表中不存在滿足條件的元素,則返回-1,否則返回0。

例如,某單鏈表如下圖(a)所示。若令mink為20、maxk為50,則刪除後的鍊錶如圖(b)所示。

鍊錶節點型別定義如下:

typedef struct nodenode, *linklist;

[c函式]

int deletelist (linklist l, int mink, int maxk)

else

if (p->data < maxk)

else break;

if ( deltag=0 )

return -1;

return 0;

}

分析:函式deletelist(linklist l, int mink, int maxk)的功能是在l在含頭節點的單鏈表l中刪除大於mink且小於maxk的元素,因此除了頭指標l以外,至少還需要兩個臨時指標,乙個用於遍歷鍊錶中的元素,另外乙個用於刪除節點時重新鏈結節點,p和q就起這樣的作用。

p指向要被刪除的節點、q指向要被刪除的節點的前驅節點。

具體過程是:如果刪除指標指向的資料不符合刪除的條件,那麼刪除指標和遍歷指標向後移動,具體實現的**是:

q=p; 

p= p->next ;

含義就是將刪除指標的位置」賦值「給遍歷指標的位置。然後刪除指標指向下一節點。之後在進行節點是否符合條件進行相應的操作判斷。

如果符合刪除節點的條件,則進行刪除操作,具體過程就是:

將遍歷指標移動到刪除指標前面,然後釋放刪除指標所指節點的空間。之後再將遍歷指標所指像的節點的下乙個節點賦值給刪除指標。

具體實現**:

q->next= p->next   ;  

free(p);

p= q->next ;

單鏈表的刪除

include include include define n 10 typedef struct node stud stud creat int n 建立新的鍊錶的函式 h name 0 0 h link null p h for i 0 i p link s printf 請輸入第 d個人的...

單鏈表的刪除

time limit 3000ms,memory limit 10000kb,accepted 299,total submissions 494已知a,b和c為三個非遞減有序的線性表,均以單鏈表作為儲存結構。現要求對a表作如下操作 刪去那些既在b表中出現又在c表中出現的元素。試對單鏈表編寫實現上述...

單鏈表的刪除

從乙個動態鍊錶中刪除乙個結點就是將該系欸但從鍊錶中分離出來,並不是真正的從記憶體中將該節點抹去,只需要改變連線關係就行了。重點語句 p1 next p2 next 例子 編寫函式del,在單向鍊錶中刪除乙個結點。分析 本題目所需要的建立鍊錶輸出鍊錶和前幾節都一樣,特殊的是del這個刪除操作的函式。i...