簡單介紹一下插入排序演算法:
題目鏈結點這
兩個例子:
解題思路:
利用插入排序這種思想給鍊錶排序
首先給出乙個測試用例
接著重新定義乙個鍊錶,把頭節點拿下來,作為新的排序鍊錶準備進行插入
cur與sorthead的值進行比較,當cur為null,作為結束條件。按我們以往的經驗,肯定不能直接與sorthead進行比較,而是重新定義乙個變數。
第一次比較:(預設公升序)
很明顯是個頭插。
第二次比較:
現在cur走到4,與下面的排序鍊錶值進行比較,比sorthead大,所以我們需要比較他的下乙個,所以需要定義乙個sortcur到下乙個節點進行比較。
因為走到這說明,值一定比頭大了,比頭小的情況在前面的if語句已經處理,
所以和第二個進行比較
經過比較發現,sortcur走到了null還沒有找到比他大的,所以應該尾插,但是怎麼尾插呢,找不到前乙個節點,所以還應該定義乙個節點名為sortprev。
sortprev->next=cur;
cur->next=sortcur;
最開始我sortprev,sortcur定義的是全域性變數,但是頭插不需要用到sortprev,sortcur。而且,每次sortcur需要回到第二個節點的位置進行比較,沒有發生什麼變化,所以我將初始化和邏輯**一起寫到迴圈語句裡。
當cur=2,和3進行比較,成了中間插入,中間插入,尾插邏輯是很相似的
;//定義在迴圈裡面
// listnode* sortcur=sorthead;
// listnode* sortprev=null;
while
(cur)
else
else
}//一種是break退出來的,一種是sortcur為空退出來的
//尾插
if(sortcur==
null)}
cur=next;
}return sorthead;
}簡單總結一下,仍然是鍊錶的特點,中間邏輯不難,頭,尾容易出現特殊情況,總的來說就是自己有點笨。
鍊錶及鏈表面試題
首先看一下順序表和煉表的優缺點,分別在什麼場景下使用?源 list.h ifndef list h define list h include include include typedef int datatype typedef struct node node,pnode,plist init...
鍊錶篇 鏈表面試題集
1.給定單鏈表,檢測是否有環。如果有環,則求出進入環的第乙個節點。判斷單向鍊錶是否有環,可以採用快指標與慢指標的方式來解決。即定義乙個快指標fast和乙個慢指標slow,使得fast每次跳躍兩個節點,slow每次跳躍乙個節點。如果鍊錶沒有環的話,則slow與fast永遠不會相遇 這裡鍊錶至少有兩個節...
鏈表面試題3 複雜鍊錶
struct clnode 複雜鍊錶 clnode,clpnode,cllist,clplist clpnode clbuynode datatype d clplist data d clplist next null clplist random null return clplist void...