-
1 .使用引用指標或指向指標的指標,因為這樣可以更改引數為指標的變數,例如分配記憶體。
2.可以刪除前端的頭部指標,但是去掉haed後需要用另乙個指標指向頭部指標,這不太容易理解,所以最好在上面這樣做,即讓頭部始終指向頭部。
3.如果堆中申請的記憶體沒有被刪除,那麼在程式完成之前,它總是會占用這個記憶體,如果堆中應用的變數很多,就會占用大量的記憶體,所以對於沒有使用的堆變數,應該及時刪除。
-
1 其實指標的引用就是指標的別名,因為鍊表預先定義了乙個節點類,然後用new來開啟空間。 打電話時更方便。 不帶指標的引用也是可能的。
2.如果你是單鏈表或雙鏈表,前端的0是不能刪除的,因為它是鍊表標題中的標記。 作為迴圈鍊表,可以刪除,鍊表末尾的值可以直接分配給鍊表頭。
3 清空 p 是為了節省記憶體,也是一種良好的程式設計習慣。 因為很多程式設計師用new來打通空間,以後忘記釋放,導致記憶體洩漏。
-
1.鍊表是指標,節點本來就是指標,但是指標指向的類中有資料,所以需要使用指標作為引數。
3. 清空 p 只是為了節省記憶體。
-
1.終端節點無法刪除的問題,可以想象乙個只有三個節點的鍊表,終端節點的id=findid,開頭p指向第二個節點,然後在執行第乙個if時,因為p->next->id==findid,第二個if語句被執行,但是這個時候, p->next->next 等於 null,因此不執行已刪除節點的 **。
2.當只有乙個節點時,因為p=head->next在開頭定義,p=null在開頭定義,當第乙個if執行時,p->next->id的物件不存在,所以發生錯誤; 當只有兩個節點時,同上,但此時 p->next 開頭為 null,因此 p->next->id 也不存在,也會出錯。
在編寫程式時,最好將每個節點的圖片畫出來,並將每個指標放在自己的位置進行操作,這樣錯誤率會低很多。 這是我寫的關於刪除節點的內容
studentnode *p1,*p2;p1 用於指向下乙個節點,p2 用於指向前乙個節點。
if( (head->next=null)
當 elseelse 找不到要刪除的節點時,請推遲 p1 和 p2。
while(p1!=null)
return 0;}
-
根據您提供的內容,因為“只有 1 或 2 個程式也無法執行...... 所以我想程式的資料結構應該是這樣的,首先考慮為什麼只有一兩個就跑不動了,head本身也是儲存資料的鍊表,它是第乙個有用的節點,head->next是第二個有用的節點,head->next>next是空的......
檢視您的 **“studentnode * p = head->next”,是從 head->next 節點(即第二個節點)向上查詢,檢視“while (p) {.}
if (findid == p->next->id) {
當 p 不為空時,迴圈執行裡面的東西,當只有乙個節點時,head->next 為空,根據 “studentnode * p = head->next”,p 為空,while 迴圈不執行,當只有兩個節點時,根據 “studentnode * p = head->next”,p 指向第二個節點,不為空, 但看**“而(p){
if (findid == p->next->id) {p->next 是第三個節點,它是空的,裡面沒有內容,所以執行 p->next->id 是錯誤的。。。和 **“if (p->next->next!= null) {p->next, p->next->next 比較有問題...。。。
**本身就有很多問題,更改以上問題後還會有其他問題,可以新增QQ(使用者名稱)給你詳細講解。
至於最後乙個節點無法刪除的情況,我不明白,程式不完整。
cin 的內容快取了,需要通過以下兩行清除**,必須先清除標誌,然後同步清除緩衝區。;; >>>More