LintCode 關於鍊錶問題的總結

2021-07-29 19:06:04 字數 1435 閱讀 9114

否則一旦提取改變p後的下乙個節點位置就丟失了。

的前驅改變,這些在操作時一定要注意。

說說我自己犯的乙個低階錯誤,在遍歷鍊錶時,p=p->next忘了寫。其他複雜的操作完成了,一激動,最普通的指標移動到下乙個節點沒了,這麼多操作也沒的迴圈了就

欺負欺負當前乙個節點,所以千萬記得做完操作後p=p->next讓下乙個節點也能享受到應有的操作。

runtime error,越界,我所有的程式幾乎都出現過這個毛病。要麼是遍歷的時候用到p->next->val,然而p已經是最後乙個節點,p->next當然沒得找。還有就是沒有申請

空間,listnode *dummy;dummy=new listnode(0);第二句**前就不要加*了。當然還有更low的沒加括號,這些低階錯誤在剛開始用時困擾了我好久,慢慢的寫熟練了這

些低階錯誤也就消失了。

很多時候都需要返回鍊錶,這時就需要事先儲存乙個頭節點,因為現在用的節點經常隨著遍歷已經走到了後邊,頭節點的用處是極大的,頭插法就是建立在此基礎之上。

然而按照一般的邏輯思維我們加東西都是依次往後加,因此尾插法更符合我們通常的思考方式。

listnode *node;

node=new listnode(0);

rear->next=node;

rear=node;

如果不是已經有的節點新插入也每乙個節點也都是需要申請空間的,申請乙個往尾巴後面加乙個,然後尾巴指向後乙個,永遠保證rear尾巴是最後乙個節點,讓新來的站在

他身後,就像弟弟妹妹一樣,每多乙個新節點小尾巴就是最新來的那個。

在對鍊錶遍歷的while迴圈中要加乙個控制結束的條件如head!=null,這裡要注意head是頭節點還是第乙個節點,如果是頭節點還需要head->next!=null,這個

head和head->next也是經常導致我犯迷糊的原因,寫著寫著就不知道需要的是哪個節點了。這時候就需要借助測試資料把自己的程式捋一遍,走到**斷了,把這裡的路修好,

繼續走,先改好程式的編譯錯誤才能為後面修改程式時加上自己沒考慮到的部分打好基礎。

鍊錶相比陣列的特點就是用邏輯關係代替連續儲存空間。如陣列1 2 3 4 5若把3移動到5後面變為1 2 4 5 3需要依次改變很多,而鍊錶只需要改一下關係讓2->next=4,5->next=3

即可。我認為鍊錶中最厲害的一句,*p=*(p->next),o(1)演算法,不用再乙個個的改前驅後繼的關係,就直接覆蓋。由此也能看出來p->next有多強大。

最後附上我做10個鍊錶題的情況,一是為老師檢查作業用,二是勉勵自己,看看那傻乎乎的compile error,提醒自己蓋房子先把框架定好了;看看那紅色的runtime error,提醒自己不要再犯類似的錯誤;看看那痛苦的wrong answer,永遠有你沒有考慮到的資料是錯誤的,最後,綠色的ac,那是我渴求的阿瓦隆。

lintcode鍊錶的中點

第一次寫的,如果fast.next是none,那麼fast.next.next會報錯 def middlenode self,head write your code here i 0if head.val none slow head fast head while fast.next val n...

LintCode 鍊錶劃分

容易 鍊錶劃分 檢視執行結果 29 通過 給定乙個單鏈表和數值x,劃分鍊錶使得所有小於x的節點排在大於等於x的節點之前。你應該保留兩部分內煉表節點原有的相對順序。您在真實的面試中是否遇到過這個題?yes 樣例 給定鍊錶 1 4 3 2 5 2 null,並且 x 3 返回 1 2 2 4 3 5 n...

LintCode 鍊錶排序

鍊錶排序 在 o n log n 時間複雜度和常數級的空間複雜度下給鍊錶排序。您在真實的面試中是否遇到過這個題?yes 樣例給出1 3 2 null,給它排序變成1 2 3 null.挑戰 標籤 相關題目 definition for listnode.public class listnode p...