1樓:匿名使用者
將結點p插入頭結點h之前
為什麼是
p->next = head;//將新增結點p的next指向head,這一步將新增的結點p加入了連結串列,但是還不能通過head在連結串列中被找到。
head = p;//更新head結點,這時候把head指向了結點p,而結點p指向了原來的head結點,這時新結點p已經可以通過head在連結串列中查詢到了。
指標q指向頭結點,要刪除此結點為什麼是
h = h->next;//在執行這一步之前,肯定要先用一個變數q將當前頭結點儲存下來,否則在執行這一步後將出現原來的頭結點因為失去引用而產生記憶體洩漏。這一步的主要作用是移動頭結點。
free(q);//釋放原頭結點所佔用的記憶體,你可能問為什麼在這裡使用q釋放,而不是一開始就直接來個free(h)完事。這是因為如果你直接這樣做那麼h所指向那個結點的記憶體將被釋放成為h=null,但是h結點之後的那些結點所佔用的記憶體卻並沒有釋放,結果就是那些記憶體失去了引用。產生記憶體空間洩漏。
2樓:匿名使用者
打個比方,有兩座橋(橋連線),三座島(島是結點)
a-->b-->c.我要拆了爆了島b使島a,c直接連線,變成a-->b。
那麼我就要在爆b進,把b->next這個c的方向告訴a,不然爆了b,我就找不到c了。所以直接可以這樣a-->next = b-->next free(b);
3樓:匿名使用者
head指向第二個節點,所以第一個節點插入head節點前應將其next指標指向head(第二個節點)
然後更新頭結點,將p設定為第一個節點.
資料結構 c語言版順序表的查詢 插入與刪除
單連結串列功能大全,嘿嘿 include include typedef struct node node 連結串列輸出 void output node head printf r n 連結串列建立 node creat head pstnext null p head while cycle s...
關於c語言的左移和右移,關於C語言的左移和右移
左移比較簡單,右邊補0 移幾位就補幾個0 左邊丟掉。右移比較複雜,右移分兩種 1 邏輯右移,左邊補0 移幾位補幾位 右邊移出去的丟掉。2 算術右移,左邊補最高位 即原來的最高位是0就補0,是1就補1,因為最高位代表符號,這樣可以保證負數不會變成正數 右邊丟掉。可以定義一箇中間變數暫存要被移出去的位,...
C語言,刪除陣列中的重複元素,C語言如何刪除陣列中的重複元素?
include stdafx.h vc 6.0加上這一行.include stdio.h void main void ln for ln sizeof a sizeof int k i 1 i k a k a i for i 0 i printf n include define n 1000 d...