單向鍊錶的尾端插入和順序插入

2021-10-01 19:21:34 字數 1825 閱讀 3967

package linkedlist;

public

class

singlelinkedlist

}//定義單鏈表singlelinkedlist

class

sll temp = temp.next;

//不是最後乙個,就將節點向後移

} temp.next = heronode;

}//顯示鍊錶,遍歷

public

void

show()

//輸出節點的資訊,注意將輔助變數temp後移,否則陷入死迴圈

dowhile

(temp.next != null);}

}class

heronode

@override

public string tostring()

';}}

錯誤方式:

1、出現空指標

原因:即使找到了尾節點,他還是會把把temp指向尾節點的next,最後temp指的是空指標,沒有next成員,所以不可以賦值

分析:1.首先找到新新增節點的位置,設定輔助變數temp遍歷所有元素,找到正確的位置

2.讓新的節點和temp的next指向同乙個變數

3.讓temp的next指向新的節點

4.個人想法:

* 在原先的基礎上 是否還要判定他是不是尾節點,沒必要,我又不是從尾節點開始新增!

* 萬一是空指標怎麼辦?先判定是不是空指標,在判定大小。

* 怎麼判定大小?比前面大,比後面小。如果是最後乙個怎麼辦?單純的比前面大你就完了,回不去,他是單向表。

* 最後乙個直接在後面進行新增

* 總體思路:從頭開始找,找到比它小的,在判定他的下乙個是否為空

* 換乙個思路,從尾部開始找,不會出現空指標

* 遍歷鍊錶,找到最後乙個元素,最後乙個元素的序號和新插入的比較,比他大,就在後面直接新增。往前再找,任何乙個比新插入的小的都是直接新增

* 確實不行,因為他是單向的,沒辦法實現從後往前,只能夠從前往後。

5.結論:最後還是按照最初的想法,如果是按照順序新增,還是雙向鍊錶比較好用。

**實現

初始**:

public

void

add(heronode heronode)

else

if(temp.next.herono > heronode.herono)

temp = temp.next;

}}

執行結果

教程**:

public

void

add(heronode heronode)

if(temp.next.herono > heronode.herono)

else

if(temp.next.herono == heronode.herono)

temp = temp.next;}if

(flag )

else

}

好處:

1.單向鍊錶是不能從後往前,但是可以從temp的後一項的號碼開始比較,比新插入項大,就是在該項前面,從後往前更快。

2.多了判定是否相同的步驟,更全面具體

3.先判定是否為最後乙個指標,再進行比較

鍊錶和順序表

順序表一般可以分為 1 靜態順序表 使用定長陣列儲存 2 動態順序表 使用動態開闢的數值儲存 順序表的靜態儲存 define n 100 typedef int sldatatype typedef struct seqlist seqlist 順序表的動態儲存 typedef struct seq...

單向鍊錶 建立 插入 刪除 遍歷

include include include using namespace std struct list create 新建鍊錶 struct list insert struct list head,struct list temp 插入 struct list deletes struct...

單向鍊錶的使用(儲存,插入,查詢)

1 鏈結儲存方法 鏈結方式儲存的線性表簡稱為鍊錶 linked list 鍊錶的具體儲存表示為 用一組任意的儲存單元來存放線性表的結點 這組儲存單元既可以是連續的,也可以是不連續的 鍊錶中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存每個結點值的同時,還必須儲存指示其後繼...