33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}DLinklist;
//创建链表并写入
void InitList(DLinklist *head , int n)
{
int i;
DLinklist *p,*s;
head = (DLinklist*)malloc(sizeof(DLinklist));
head -> next = NULL;
p = head;
for(i = 1;i <= n;++i)
{
s = (DLinklist*)malloc(sizeof(DLinklist));
scanf("%d",&s -> data);
s -> next = NULL;
p -> next = s;
p = s;
}
}
//打印链表
void print(DLinklist *head)
{
DLinklist *s = head -> next;
while(s -> next != NULL)
{
printf("%d",s -> data);
s = s -> next;
}
}
int main()
{
DLinklist *head;
InitList(head,8);
print(head);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}DLinklist;
//创建链表并写入
DLinklist * InitList(DLinklist *head , int n)
{
int i;
DLinklist *p,*s;
head = (DLinklist*)malloc(sizeof(DLinklist));
head -> next = NULL;
p = head;
for(i = 1;i <= n;++i)
{
s = (DLinklist*)malloc(sizeof(DLinklist));
scanf("%d",&s -> data);
s -> next = NULL;
p -> next = s;
p = s;
}
return head;
}
//打印链表
void print(DLinklist *head)
{
DLinklist *s = head -> next;
while(s != NULL)
{
printf("%d",s -> data);
s = s -> next;
}
}
int main()
{
DLinklist *head;
head = InitList(head,8);
print(head);
return 0;
}
第二种,直接在main函数中给head分配空间并让head指向该空间,那么在调用 InitList(head,8);时,head的拷贝实际上也指向该空间,后序操作就一样了。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}DLinklist;
//创建链表并写入
void InitList(DLinklist *head , int n)
{
int i;
DLinklist *p,*s;
p = head;
for(i = 1;i <= n;++i)
{
s = (DLinklist*)malloc(sizeof(DLinklist));
scanf("%d",&s -> data);
s -> next = NULL;
p -> next = s;
p = s;
}
}
//打印链表
void print(DLinklist *head)
{
DLinklist *s = head -> next;
while(s != NULL)
{
printf("%d",s -> data);
s = s -> next;
}
}
int main()
{
DLinklist *head;
head = (DLinklist*)malloc(sizeof(DLinklist));
head -> next = NULL;
InitList(head,8);
print(head);
return 0;
}
另外,你的print函数中的判断条件while(s -> next != NULL)会导致最后一个节点无法输出,所以我改了下。