C 單向鍊錶的排序

2021-09-27 21:55:43 字數 1219 閱讀 7773

首先,要建立一些無序的單向鍊錶用於測試。

public

class

listnode

}class

program

->"

, rdm);}

return head.next;

}static

void

main()

}

每次迴圈都對比相鄰兩個節點的大小,當下乙個節點比當前節點大時,就進行交換操作。每個內迴圈只執行一次交換操作。外迴圈的終止條件是,內迴圈不再有交換操作發生。

//從小到大排序 暴力排序,每次只排序乙個節點

public

listnode

sortviolencelistnode

(listnode l)

prenode = startnode;

startnode = nextnode;}}

return l;

}

想法:

從鍊錶的第二個節點開始,外迴圈將逐個抽取後續的節點,每次抽取後進入內迴圈,找到合適自己的位置並插入。這樣可以保證,在外迴圈選中節點的左邊鍊錶,必定是按順序排列好的。

注意:

icount最大值 + 1 = jcount最大值,因為外迴圈是從第二個開始的,而內迴圈是從第乙個開始的;

headnode必須始終指向頭節點;

每個迴圈的開始都必須先獲取當前節點的下乙個節點,例如inext = i.next; 或者 jnext = j.next;。這是因為當節點發生連線、插入操作後,節點的下乙個節點可能會發生變化;

對於上一節點iprenode必定始終是排好鍊錶部分的最後乙個;

//從小到大排序 插入排序

public

listnode

sortinsidelistnode

(listnode l)

else

if(j.val < i.val &&

(jcount < icount && i.val <= j.next.val))}

if(!hasinside) iprenode = i;

}return headnode;

}

C 單向鍊錶

單向鍊錶 鍊錶的功能包括 向尾節點新增資料,遍歷鍊錶中的節點,在鍊錶結束時釋放所有節點 class cnode 定義乙個節點類 class csllist 定義鍊錶類csllist類 csllist m nodesum 0 pdelete null ptmp null m pheader null ...

C 單向鍊錶

實現鍊錶的增刪改查 ownlinklist.cpp include include include ownlinklist.h include using namespace std node init node get elment node list,int index if i index 1...

單向鍊錶實現倒排序

include stdafx.h include include include using namespace std struct siglist int value siglist pnext siglist phead null siglist p1 null siglist p2 null...