在一个递加的链表中插入一个数,插入后仍然递增。错在哪儿
在一个递增的链表中插入一个数,插入后仍然递增。错在哪儿?
一个链表已经存在,假设输入的数中是递增的。现在插入一个数,如果这个数介于最大值和最小值之间。那么插入式正确的。但是如果这个数大于链表中最大的数,那个程序就会出错。程序直接死掉。这是怎么一回事呢?
例如:在一个链表:1 2 3 4 5中插入7,那个程序会死掉。而插入4程序正确的输出。
------解决方案--------------------
while(p->next->data<=x&&p->next!=NULL) 这里两个条件交换过来写, 否则当p->next为空时, 你的程序就崩溃了.
------解决方案--------------------
bug
当p->next == NULL,那么再访问data就是操作空指针,这情况程序直接荡掉!如果在核心里操作空指针,系统直接崩掉。使用指针务必注意的头等大事:指针不能为空,而且不能越界。
一个链表已经存在,假设输入的数中是递增的。现在插入一个数,如果这个数介于最大值和最小值之间。那么插入式正确的。但是如果这个数大于链表中最大的数,那个程序就会出错。程序直接死掉。这是怎么一回事呢?
例如:在一个链表:1 2 3 4 5中插入7,那个程序会死掉。而插入4程序正确的输出。
#include <stdio.h>
#include <malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode, * LinkList;
void maopaosort(LinkList L);
void ListCreat(LinkList L) {
int n =0;
printf("请输入结点的个数:\n");
scanf("%d",&n);
LinkList p=L;
for(int i=1;i<=n;i++,p=p->next)
{
p->next=(LinkList )malloc(sizeof(LNode) );
scanf("%d",&p->next->data);
}
p->next=NULL;
}
void ListTraver(LinkList L) {
LinkList p=L->next;
for(;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
void ListInsert(LinkList L, int x) {
LinkList p=L, s;
s=(LinkList )malloc(sizeof(LNode));
s->data=x;
while(p->next->data<=x&&p->next!=NULL)
p=p->next;
s->next=p->next;
p->next=s;
}
int main(void) {
LinkList L=(LinkList )malloc(sizeof(LNode) );
ListCreat(L);
ListTraver(L);
//maopaosort(L);
//ListTraver(L);
int number=0;
printf("请输入一个想要插入的数:\n");
scanf("%d",&number);
ListInsert(L,number);
printf("插入后的链表为:\n");
ListTraver(L);
return 0;
}
链表
插入
递增
------解决方案--------------------
while(p->next->data<=x&&p->next!=NULL) 这里两个条件交换过来写, 否则当p->next为空时, 你的程序就崩溃了.
------解决方案--------------------
bug
while(p->next->data<=x&&p->next!=NULL)
当p->next == NULL,那么再访问data就是操作空指针,这情况程序直接荡掉!如果在核心里操作空指针,系统直接崩掉。使用指针务必注意的头等大事:指针不能为空,而且不能越界。