首先,要建立一些無序的單向鍊錶用於測試。
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...