題目:實現一個單鏈表的插入排序
void InsertSort(List l) p = l; //p,q用來維護插入位置的前後指針 q = l.next; r = q; //r,s用來維護當前帶插入的前後指針 s = r.next; while(s) { while( !q.equals(s)&& s.data > q.data) //如果q != s, p,q下移 { p = p.next; q = q.next; } if(q.equals(s)) //當跳出的循環條件是q == s時,說明s比前面的都大,不用插入 { p = l; q = l.next; r = r.next; s = s.next; } else //當跳出的條件是s.data > q.data時, { //這是交換節點 r.next = s.next; s.next = q; p.next = s; //讓s指向它原先的下一個,繼續進行這個過程 s = r.next; //讓p,q回到起始位置,以便下一個插入時從頭進行比較 p = l; q = l.next; } }