建立一包含10个整型数的单链表,表中元素递增有序,将一新数据值X插入到单链表适当位置,保持单链表的有序性

/*链表元素输出运算PrintList(L)的实现*/
void PrintList(LinkList L)
{
ListNode *p;
p=L->next;
while(p!=NULL)
{
printf(" %c ",p->data);
p=p->next;
}
printf("\n");
}
void InsertList(LinkList head, DataType x)
{
ListNode *p,*q,*s;
int i,j=1;
p=head;
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x;
for(i=1;x>=p->next->data;i++)
{
p=p->next;

}
p=head;
while(j<=i)
{
q=p;p=p->next;
j++;
}
s->next=q->next;
q->next=s;

}
求上述每一行步骤的详细注释 !!谢谢!

void PrintList(LinkList L)
{ ListNode *p;
p=L->next; /*指向第一个结点*/
while(p!=NULL) /*不空时一直循环*/
{ printf(" %c ",p->data); /*打印结点的数值*/
p=p->next; /*指针后移一结点*/
}
printf("\n"); /*另起一行显示*/
}
void InsertList(LinkList head, DataType x)
{
ListNode *p,*q,*s; /*q前面结点地址,p后面结点地址,新建结点地址*/
int i,j=1;
p=head; /*p指向头结点*/
s=(ListNode *)malloc(sizeof(ListNode)); /*创建新节点,用s指示*/
s->data=x; /*给新建结点赋值*/
for(i=1;x>=p->next->data;i++) /*循环,找第一个大于新结点的结点*/
{
p=p->next; /* 循环指针后移 循环结束时,i记录第一个大于新结点的结点序号*/
}
p=head; /*p重新指向头结点*/

while(j<=i) /* 再次循环、找到比新结点的值小的最大结点地址*/
{
q=p;p=p->next; /*用q记录前驱,p记录后继*/
j++; /*改变循环变量*/
}
s->next=q->next; /*把比新结点大的第一个结点连在新结点后*/
q->next=s; /*把新结点连在比它小的最后一个结点后*/

}
温馨提示:答案为网友推荐,仅供参考
相似回答