?? 例11.10.txt
字號:
例11.10寫一函數以刪除動態鏈表中指定的結點。
以指定的學號作為刪除結點的標志。例如,輸入99103表示要求刪除學號為99103的結點。解題的思路是這樣的:從p指向的第一個結點開始,檢查該結點中的num值是否等于輸入的要求刪除的那個學號。如果相等就將該結點刪除,如不相等,就將p后移一個結點,再如此進行下去,直到遇到表尾為止。
可以設兩個指針變量p1和p2,先使p1指向第一個結點(圖11.20(a))。如果要刪除的不是第一個結點,則使p1后指向下一個結點(將p1->next賦給p1),在此之前應將p1的值賦給p2,使p2指向剛才檢查過的那個結點,見圖11.20(b)。如此一次一次地使p后移,直到找到所要刪除的結點或檢查完全部鏈表都找不到要刪除的結點為止。如果找到某一結點是要刪除的結點,還要區分兩種情況:①要刪的是第一個結點(p1的值等于head的值,如圖11.20(a)那樣),則應將p1->next賦給head。見圖11.20(c)。這時head指向原來的第二個結點。第一個結點雖然仍存在,但它已與鏈表脫離,因為鏈表中沒有一個結點或頭指針指向它。雖然p1還指向它,它仍指向第二個結點,但仍無濟于事,現在鏈表的第一個結點是原來的第二個結點,原來第一個結點已“丟失” ,即不再是鏈表中的一部分了。② 如果要刪除的不是第一個結點,則將p1->next賦給p2->next,見圖11.20(d)。p2->next原來指向p1指向的結點(圖中第二個結點),現在p2->next改為指向p1->next所指向的結點(圖中第三個結點)。p1所指向的結點不再是鏈表的一部分。還需要考慮鏈表是空表(無結點)和鏈表中找不到要刪除的結點的情況。圖11.21表示解此題的算法。
刪除結點的函數del如下:
struct student
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -