题目:实现一个单链表的插入排序
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; } }