.[題目分析] 雙向循環鏈表自第二結點至表尾遞增有序要求將第一結點插入到鏈表中使整個鏈表遞增有序由於已給條件(a<x<an)故應先將第一結點從鏈表上摘下來再將其插入到鏈表中相應位置由於是雙向鏈表不必象單鏈表那樣必須知道插入結點的前驅
void DInsert(DLinkedList dl)∥dl是無頭結點的雙向循環鏈表自第二結點起遞增有序本算法將第一結點(a<x<an)插入到鏈表中使整個鏈表遞增有序
{s=la;∥s暫存第一結點的指針
p=la>next;p>prior=la>prior;p>prior>next=p;∥將第一結點從鏈表上摘下
while(p>data<x)p=p>next;∥查插入位置
s>next=p;s>prior=p>prior;p>prior>next=s;p>prior=s;∥插入原第一結點s
}∥算法結束
[算法討論] 由於題目已給a<x<an所以在查找第一結點插入位置時用的循環條件是p>data<x即在a和an間肯定能找到第一結點的插入位置若無此條件應先看第一結點數據域值x是否小於等於a如是則不作任何操作否則查找其插入位置循環控制要至多查找完a到an結點
if(p>data<x)p=p>next;else break;
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23319.html