陣列作為資料儲存結構有一定的缺陷。無序陣列中搜尋效能差,有序陣列中,插入效率低。兩種陣列的刪除效率都很低。並且,陣列在建立後大小就固定了,設定過大會造成記憶體浪費,過小不能滿足資料儲存的需要。
陣列是一種通用資料結構,可以用來實現棧,佇列等很多資料結構。鍊錶也是一種通用資料結構,可以作為實現棧,佇列等資料結構的基礎。除非需要頻繁的通過下標來隨機訪問各個資料,否則很多使用陣列的地方可以使用鍊錶代替。
鍊錶(linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。
使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。
單鏈表是鍊錶中結構最簡單的。乙個單鏈表的節點(node)分為兩個部分,第乙個部分(data)儲存或者顯示關於節點的資訊,另乙個部分儲存下乙個節點的位址。最後乙個節點儲存位址的部分指向空值。
單向鍊錶只可向乙個方向遍歷,一般查詢乙個節點的時候需要從第乙個節點開始每次訪問下乙個節點,一直訪問到需要的位置。而插入乙個節點,對於單向鍊錶,我們只提供在煉表頭插入,只需要將當前插入的節點設定為頭節點,next指向原頭節點即可。刪除乙個節點,我們將該節點的上乙個節點的next指向該節點的下乙個節點。
自己寫的解法:
/**
* definition for singly-linked list.
* public class listnode
* listnode(int val)
* listnode(int val, listnode next)
* }*/class solution
while(q!=null)
int revsum1=0,revsum2=0;
while(sum1!=0)
while(sum2!=0)
int result=revsum1+revsum2;
system.out.println(result);
system.out.println(revsum1);
system.out.print(revsum2);
listnode l3=new listnode(0);
listnode curr=l3;
while(result!=0)
}return l3;}}
比較麻煩,而且正常可以執行出結果。但是
這種情況就會出現錯誤,在反轉加數過程**現了溢位。
將int轉換為long,可以避免溢位,但是出現了新的問題
與原結果差了乙個8,很神奇。
使用按位相加,儲存進製的方法
大佬果然還是大佬,小弟佩服佩服。
面對問題我總想用最暴力的方法解決,這個想法應該糾正。編**前多思考。
對於鍊錶的使用還不太熟練,不太理解。要學的還有很多。。
鍊錶實現兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
鍊錶實現多項式相加
均已除錯通過,編譯器為dev c 多項式相加程式,用鍊錶實現 係數 coefficient 指數exponent 多項式 multinomial include typedef struct lnode lnode,linklist 建立兩個鍊錶 int main while pr1 next pr...
鍊錶實現多項式相加
演算法attch c,e,d 建立乙個新結點,其係數 coef c 指數exp e 並把它鏈到 d 所指結點之後,返回該結點指標。polypointer attch int c int e polypointer d 演算法 padd 實現兩個多項式 a b 相加 c x a x b x polyp...