.[題目分析] 在無序的單鏈表上查找最小值結點要查遍整個鏈表初始假定第一結點是最小值結點當找到最小值結點後判斷數據域的值是否是奇數若是則與其後繼結點的值相交換即僅僅交換數據域的值用三個賦值語句即可交換若與後繼結點交換位置則需交換指針這時應知道最小值結點的前驅至於刪除後繼結點則通過修改最小值結點的指針域即可
[算法設計]
void MiniValue(LinkedList la)∥la是數據域為正整數且無序的單鏈表本算法查找最小值結點且打印若最小值結點的數值是奇數則與後繼結點值交換;否則就刪除其直接後繼結點
{p=la>next;∥設la是頭結點的頭指針p為工作指針
pre=p;∥pre指向最小值結點初始假定首元結點值最小
while(p>next!=null)∥p>next是待比較的當前結點
{if(p>next>data<pre>data)pre=p>next;
p=p>next;∥後移指針
}
printf(最小值=%d\npre>data);
if(pre>data%!=)∥處理奇數
if(pre>next!=null)∥若該結點沒有後繼則不必交換
{t= pre>data;pre>data=pre>next>data;pre>next>data=t;}∥交換完畢
else∥處理偶數情況
if(pre>next!=null)∥若最小值結點是最後一個結點則無後繼
{u=pre>next;pre>next=u>next;free(u);} ∥釋放後繼結點空間
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23326.html