{
intNode *h = a,*p,*q; //h 爲合併後的連表,p 爲 a的指針, q是b的指針;
while(b)
{
for (p = h; p && p->val<b->val; q = p, p = p->next);
if (p == h)
h=b;
else
q->next=p ;
q = b;
b = b->next;
q->next=p ;
}
return h;
}
看循環的第一部分。如果注意到循環條件括號後的分號,我們能夠確認這是一個空循環。但是仔細研究該循環,發現該循環又有非常重要的用途。用自然語言描述該循環條件,應該是:讓指針p指向鏈表h,當鏈表p的當前表元不是鏈表尾,且鏈表p的當前表元的成員val小於鏈表b的當前表元的成員val時,讓指針q指向鏈表p的當前位置,鏈表p的當前表元順序向後移動一次。 (這也就是在鏈表p(h)中找到第一個表元,該表元的成員val大於或等於鏈表b的當前表元的成員val。) 如果鏈表p的當前表元是鏈表尾了,那意味着什麼?這種情況說明鏈表b的當前表元應該插入到鏈表p(h)的末尾,因爲兩個鏈表已經是升序排列的了.