[算法討論]由於算法要求不得使用NEW過程申請空間也沒明確指出鏈表具有頭結點所以上述算法復雜些它可能需要在第一個結點前插入新結點即鏈表的頭指針會發生變化如有頭結點算法不必單獨處理在第一個結點前插入結點情況算法會規范統一下面的()是處理帶頭結點的例子算法中偶數鏈上結點是靠數據整除等於(DATA DIV =)判斷的
類似本題的其它題解答如下
()[題目分析]本題基本類似於上面第題不同之處有二一是帶頭結點二是分解後的兩個鏈表一個是數據值小於另一個是數據值大於由於沒明確要求用類PASCAL書寫算法故用C書寫如下
void DisCreat(LinkedList A)∥A是帶頭結點的單鏈表鏈表中結點的數據類型為整型本算法將A分解成兩個單鏈表B和CB中結點的數據小於零C中結點的數據大於零
{B=A;
C=(LinkedList )malloc(sizeof(LNode));∥為C申請結點空間
C>next=null∥C初始化為空表
p=A>next;∥p為工作指針
B>next=null;∥B表初始化
while(p!=null)
{r=p>next;∥暫存p的後繼
if (p>data<)∥小於的放入B表
{p>next=B>next; B>next=p; }∥將小於的結點鏈入B表
else {p>next=C>next; C>next=p; }
p=r;∥p指向新的待處理結點
}
}∥算法結束
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23346.html