有一个不带头结点的单链表list,链表中结点都有两个域:数据域data和指针域link。已知初始时该单链表无序,请设计一个算法将该链表按结点数据域的值的大小,将其从小到大依次重新链接,在链接过程中不得使用除该链表以外的任何链结点空间。要求: 根据设计思想

admin2019-08-01  38

问题 有一个不带头结点的单链表list,链表中结点都有两个域:数据域data和指针域link。已知初始时该单链表无序,请设计一个算法将该链表按结点数据域的值的大小,将其从小到大依次重新链接,在链接过程中不得使用除该链表以外的任何链结点空间。要求:
根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

选项

答案算法设计如下: typedef struct LNode{ int data; struct LNode*link; }*linkedlist; LinkedList LinkListSort(LinkedList list){ Lnode*P,*q; p=list一>link; //p是工作指针,指向待排序的当前元素 list一>link=null: //假定第一个元素有序,即链表中现只有一个结点 while(P!=null){ r=p一>link; //r是P的后继 q=list; if(q一>data>p一>data){ //处理待排序结点P比第一个元素结点小的情况 p->link=list; list=P: //链表指针指向最小元素 } else{ //查找元素值最小的结点 while(q一>link==null&&q->link->datadata)q=q一>link; p一>link=q一>link; //将当前排序结点链入有序链表中 q->link=p; } p=r; //p指向下个待排序结点 } }

解析
转载请注明原文地址:https://jikaoti.com/ti/WAGjFFFM
0

最新回复(0)