本帖最后由 风过无痕丶 于 2018-3-23 12:31 编辑 #pragma warning(disable : 4996)
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}NODE, *linklist;
linklist initlist(void)
{
linklist pHead = (linklist)malloc(sizeof(NODE));
if (pHead == NULL)
{
printf("无法分配空间,初始化失败。");
exit(-1);
}
printf("初始化成功\n");
return pHead;
}
void creatlist(linklist L)
{
int i, val, n;
printf("请问您想输入多少个元素:");
scanf("%d", &n);
linklist pTail = L;
pTail->next = NULL; // 让它指向尾节点~
for (i = 0; i < n; i++)
{
printf("请输入第%d个元素",i + 1);
scanf("%d", &val);
// p = (linklist)malloc(sizeof(NODE)); // 你这里准备直接覆盖吗?
linklist pNew = (linklist)malloc(sizeof(NODE));
// 这里在检查一下是不是节点都生成成功了!
if (pNew == NULL) {
printf("空间分配失败,程序结束!\n");
exit(-1);
}
pNew->data = val;
pTail->next = pNew;
pNew->next = NULL;
pTail = pNew;
/*
printf("请输入第%d个元素", j + 1);
scanf("%d ", &p->data);
p->next = L->next;
L->next = p;
*/ // 按照我的理解。 这里应该造一个节点赋值一个节点
}
}
void seelist(linklist L)
{ // 这里是输出函数? 那返回一个值回去干什么啊。。 没意义啊~
int k = 0;
linklist p = NULL;
p = L->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
//p++; 这里的P++是什么操作?
}
/*
if (k == 0) 这里的K又代表什么,他呗初始化了0 这一条是肯定会被运行的~为什么会让他来判断链表是不是为空~
{
printf("链表为空。");
return -1;
}
return 0;
*/
}
int main()
{
linklist L = NULL;
L = initlist();
creatlist(L);
seelist(L);
system("pause");
return 0;
}
你何必写那么多层指针为难自己呢~linklist本来就是指针类型了~就没必要再取地址了~你再取个地址,就要解一层~ |