满意答案
uk1011
2019.04.05
采纳率:54% 等级:12
已帮助:11322人
首先,主函数中,“请输入插入的数据”那里scanf应该是&b,这是引发崩溃的原因。
其次,insert函数的目的应该是想插入数据后仍是有序链表。但你的insert函数逻辑太乱,有些不必要的判断,我修正了你的代码,贴给你看看。(虽然你insert是想保证有序,但你在创建的时候没有保证有序,所以最终结果不一定是有序。例如,创建 1,5,2,插入3,最后输出的是 1,3,5,2)
代码修改:
scanf("%d", &b);
重写了insert函数,简化逻辑;
动态分配的内存记得释放,增加freeNode释放空间
#include
#include
struct link
{
int data;
struct link *next;
};
struct link *add(struct link *head);//创建链表
void display(struct link *head);//输出数据
struct link *insert(struct link *head, int b); //插入新节点
void freeNode(struct link *);//释放空间
int main()
{
char c;
struct link *head = NULL;
printf("要创建一个链表吗?");
scanf(" %c", &c);
while (c == 'y' || c == 'Y')
{
head = add(head);
printf("要继续创建节点吗?");
scanf(" %c", &c);
}
display(head);
int b;
printf("输入插入的数据");
scanf("%d", &b);
head = insert(head, b);
display(head);
freeNode(head);
}
仅供参考试
00分享举报