问答题 设一单向链表的头指针为head,链表的记录中包含着整数类型的key域,试设计算法,将此链表的记录按照key递增的次序进行就地排序。【中科院计算所1999年】
【正确答案】正确答案:算法的基本设计思想:本题明确地指出单链表带头结点,这时只需从第二结点开始,将各结点采用插入排序法依次插入到有序链表中,即可实现就地排序。算法的代码: LinkList LinkListInsertSort(LinkList la){ //本算法利用直接插入原则将链表整理成递增的有序链表 if(1a->next!=NULL) //链表不为空表 { p=la一>next->next; //p指向第一结点的后继 la一>next一>next=NuLL; //第一元素有序,从第二元素起依次插入 while(P!=NULL) { r=p->next; //暂存P的后继 q=1a, while(q一>next!=NULL&&q一>next一>datadata) q=q->next ; //查找插入位置 p->next=q->next; //将P结点链入链表 q一>next=p; P=r; } } return 1a; }//LinkListInsertSort
【答案解析】