69,370
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
void InsertList(LinkList *L,int m)
{
Node *t,*s;
s=*L;
while(s->next->data<m) s=s->next;
t=(Node*)malloc(sizeof(Node));
t->data=m;
t->next=s->next;
s->next=t;
}
void Print(LinkList L)
{
Node *p;
p=L->next;
while(p->next)
{
printf("%d ",p->data);
p=p->next;
}printf("%d",p->data);
}
int main()
{
LinkList L;
int i,a,m,n;
Node *last,*p;
L=(LinkList)malloc(sizeof(Node));
L->data=0;
L->next=NULL;
last=L;
//输入个数和待插入数
scanf("%d %d",&n,&m);
//输入序列
for(i=0;i<n;i++)
{
scanf("%d",&a);
p=(Node*)malloc(sizeof(Node));
p->data=a;
p->next=NULL;
last->next=p;
last=p;
}
InsertList(&L,m);
Print(L);
return 0;
}
while(s->next->data<m) s=s->next; //这里s->next可能为空,s->next->data这样访问会崩溃的
s->next && s->next->data < m;//应该改成这样
#include <stdio.h>
#include<malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
void InsertList(LinkList *L,int m)
{
Node *t,*s;
s = *L;
while (s->next && s->next->data < m) {
s = s->next;
}
//while(s->next->data < m)
// s = s->next;
t = (Node *)malloc(sizeof(Node));
t->data = m;
t->next = s->next;
s->next = t;
}
void Print(LinkList L)
{
Node *p;
p = L->next;
while(p->next)
{
printf("%d ",p->data);
p = p->next;
}
printf("%d\n", p->data);
}
int main()
{
LinkList L;
int i,a,m,n;
Node *last,*p;
L=(LinkList)malloc(sizeof(Node));
L->data = 0;
L->next = NULL;
last = L;
//输入个数和待插入数
scanf("%d%d", &n, &m);
//输入序列
for(i=0;i<n;i++)
{
scanf("%d",&a);
p=(Node*)malloc(sizeof(Node));
p->data=a;
p->next=NULL;
last->next=p;
last=p;
}
InsertList(&L,m);
Print(L);
return 0;
}
while (s->next && s->next->data < m) {
s = s->next;
}
//对比一下
//while(s->next->data < m)
// s = s->next;
若不判断s->next是否为NULL,那么s->next->data < m就可能导致段错误。因为s->next可能为NULL