A-A+

已知一个有序单链表(从小到大排列) 表头指针为head 编写一个函数向该单链表中插入一个元素

2022-08-12 15:44:49 问答库 阅读 196 次

问题详情

已知一个有序单链表(从小到大排列),表头指针为head,编写一个函数向该单链表中插入一个元素为x的节点,使插入后该单链表仍有序。


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:本题的算法思想:先建立一个待插入的结点然后依次与链表中的各结点的数据域比较大小找到插入该结点的位置最后插入该结点。实现本题功能的函数如下:node*insert(node*headint x){node*s*p*q;s=(node*)malloc(sizeof(node));/*建立一个待插入的结点*/s一>data=x;s一>next=NULL;if(head==NULL||x<head一>data)/*若单链表为空或x小于第一个结点的data域*/{s一>next=head; /*把s结点插入到表头后面*/head=s;}else{q=head; /*为s寻找插入位置p为待比较的结点q为p的前趋结点*/p=A一>headwhile(p!=NULL&&x>p一>data)/*若x小于p所指结点的data域值*//*则退出while循环*/if(x>p一>data)( q=p;p=p一>next;}s一>next=p; /*将s结点插入到q和p之间*/A一>next=s;}}
本题的算法思想:先建立一个待插入的结点,然后依次与链表中的各结点的数据域比较大小,找到插入该结点的位置,最后插入该结点。实现本题功能的函数如下:node*insert(node*head,intx){node*s,*p,*q;s=(node*)malloc(sizeof(node));/*建立一个待插入的结点*/s一>data=x;s一>next=NULL;if(head==NULL||x<head一>data)/*若单链表为空或x小于第一个结点的data域*/{s一>next=head;/*把s结点插入到表头后面*/head=s;}else{q=head;/*为s寻找插入位置,p为待比较的结点,q为p的前趋结点*/p=A一>headwhile(p!=NULL&&x>p一>data)/*若x小于p所指结点的data域值*//*则退出while循环*/if(x>p一>data)(q=p;p=p一>next;}s一>next=p;/*将s结点插入到q和p之间*/A一>next=s;}}

考点:表头,指针