經典鏈表面試題 對鍊錶進行插入排序

2021-10-18 12:44:52 字數 2049 閱讀 5246

簡單介紹一下插入排序演算法:

題目鏈結點這

兩個例子:

解題思路:

利用插入排序這種思想給鍊錶排序

首先給出乙個測試用例

接著重新定義乙個鍊錶,把頭節點拿下來,作為新的排序鍊錶準備進行插入

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...