#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *link;
}list;
list *header =NULL;
void insert(int num)
{
printf("num:%d ", num);
struct node *temp, *r;
temp = header;
r = malloc(sizeof(struct node));
r -> data = num;
if(temp == NULL ||temp-> data > num )
{
r-> link = temp ;
header = r;
}
else
{
while(temp !=NULL)
{
if(temp -> data <= num && (temp->link->data > num));
{
r -> link = temp -> link;
temp->link=r;
return;
}
temp = temp -> link;
}
}
}
void display()
{
struct node *temp;
temp = header;
while(temp != NULL)
{
printf("%d ", temp->data);
temp = temp->link;
}
}
void main( )
{
insert(10);
insert(5);
insert(17);
insert(8);
insert(23);
insert(78);
display();
}
这里我试图按升序插入元素。令我惊讶的是,我得到的输出是5 78 23 8 17 10,这是不正确的,有谁可以请看看这个?任何帮助将不胜感激..
答案 0 :(得分:1)
为了在链表中按升序插入节点,您必须解决以下情况 -
1.列表为空:当列表中没有元素时
2.在开头插入:当r->data < header->data
时,需要在列表的最开头插入
3.在结尾处插入:当r->data
大于列表中具有最大值的节点时,需要在最后插入(假设我们在此处执行已排序的插入),作为用户{{ 1}}已经指出了
4.插入中间:当@keltar
但小于列表中的最大元素时,需要将其插入标题和最后一个节点之间的某处。
排序插入的简单实现如下 -
r->data > header->data