若有一带头结点[1]的单链表[2]L中的元素为(20,15,17,18,9,6,8),经过如下的运算处理之后,单链表L变化为()。void Proc(LinkList L){ if (IL->nextI(L->next->next)) return; s=L->next->next; L->next->next=NULL; while(s!=NULL){ pre=L; p=L->next; while(p&&s->data<p->data){ pre=p; p=p->next; temp=s->next; pre->next=s; s->next=p; s=temp; }}A.(15,17,9,18,20,6,8)B. (20,18,17,15,9,8,6 )C.(6,8,9,15,17,18,20)D.(8,6,9,18,17,15,20)
若有一带头结点[1]的单链表[2]L中的元素为(20,15,17,18,9,6,8),经过如下的运算处理之后,单链表L变化为()。
void Proc(LinkList L){
if (IL->nextI(L->next->next)) return;
s=L->next->next; L->next->next=NULL; while(s!=NULL){ pre=L; p=L->next;
while(p&&s->data<p->data){ pre=p; p=p->next;
temp=s->next;
pre->next=s; s->next=p;
s=temp;
}
}
A.(15,17,9,18,20,6,8)
B. (20,18,17,15,9,8,6 )
C.(6,8,9,15,17,18,20)
D.(8,6,9,18,17,15,20)
题目解答
答案
这段代码实现了一个对带头结点的单链表进行特定处理[3]的功能。处理的过程是将链表[4]中的元素按照从小到大的顺序重新排列。
首先判断如果链表长度小于等于 2 则直接返回。
然后将链表从第二个元素开始断开,得到一个新的链表s,原链表只保留第一个元素,且第一个元素后的节点置为NULL。
接着使用while循环遍历新链表s。在每次循环中,找到合适的位置将s中的节点插入到原链表中,使得原链表始终保持有序。
对于给定的链表(20,15,17,18,9,6,8),经过上述处理过程:
首先断开后得到s=(15,17,18,9,6,8),原链表变为(20,NULL)。
然后从s中取出第一个节点15,遍历原链表找到合适位置插入,此时链表变为(15,20,NULL)。
接着取出s中的下一个节点17,插入后链表变为(15,17,20,NULL)。
以此类推,最终链表变为有序的(6,8,9,15,17,18,20)。
答案选择为D.