![]() |
#2
forever742020-04-11 00:12
|

#include<stdio.h>
#include<stdlib.h>
typedef struct student{
int num;
struct student *next;
}Node;
typedef struct _List{
Node* head;
}List;//结构用来存储头指针
void add(List *Plist,int number);//创建链表的函数
void print(List *Plist);//遍历链表的函数
int main(void)
{ List list;
list.head = NULL;
int number;
do{
scanf("%d",&number);
if(number!=-1){
add(&list,number);
}
}while(number!=-1);
printf("遍历整个链表\n");
print(&list);//打印整个链表
}
void print(List *Plist)
{ Node *P = NULL;
for(P = Plist->head; P; P = P->next){
printf("%d ",P->num);
}
printf("\n");
}
void add(List *Plist,int number)
{
Node *P = (Node*)malloc(sizeof(Node));
P->num = number;
P->next = NULL;
Node *last = Plist -> head;(这里我原本写的是Node *last = NULL;)
if(last){
while (last->next){
last = last->next;
}
last->next = P;
} else {
Plist->head = P;
}
}
#include<stdlib.h>
typedef struct student{
int num;
struct student *next;
}Node;
typedef struct _List{
Node* head;
}List;//结构用来存储头指针
void add(List *Plist,int number);//创建链表的函数
void print(List *Plist);//遍历链表的函数
int main(void)
{ List list;
list.head = NULL;
int number;
do{
scanf("%d",&number);
if(number!=-1){
add(&list,number);
}
}while(number!=-1);
printf("遍历整个链表\n");
print(&list);//打印整个链表
}
void print(List *Plist)
{ Node *P = NULL;
for(P = Plist->head; P; P = P->next){
printf("%d ",P->num);
}
printf("\n");
}
void add(List *Plist,int number)
{
Node *P = (Node*)malloc(sizeof(Node));
P->num = number;
P->next = NULL;
Node *last = Plist -> head;(这里我原本写的是Node *last = NULL;)
if(last){
while (last->next){
last = last->next;
}
last->next = P;
} else {
Plist->head = P;
}
}
在代码中标记的地方, Node *last = Plist -> head; 这一行我原本写的是Node *last = NULL;,因为在main里面list.head就是NULL,反正都是NULL为什么不能直接给Node *last赋上NULL呢
代码结果如下:
只有本站会员才能查看附件,请 登录
这个是错误的结果,遍历只显示最后一个
只有本站会员才能查看附件,请 登录
正确的是显示全部的
忘了free了
[此贴子已经被作者于2020-4-10 23:41编辑过]