#include<stdio.h>
#include<stdlib.h>
#define NULL 0
//定义链表结点的结构体
typedef struct Node {
int data; //定义结点的数据域
struct Node* next; //定义结点的指针域,指针域为指到本类型的指针
}Node, * LinkList;
//声明函数
InitList(LinkList* L);
void CreateFromTail(LinkList L);
void LinkPrint(LinkList L);
//主函数
int main() {
int i;
LinkList L = { 0 };
InitList(&L); //链表的初始化
CreateFromTail(L); //创建链表
LinkPrint(L); //打印链表
}
//单链表的初始化
InitList(LinkList* L) {
*L = (LinkList)malloc(sizeof(Node)); //创建一个头结点
(*L)->next = NULL; //并使头结点的指针域为空
return L;
}
//单链表的创建
void CreateFromTail(LinkList L)
{
int flag = 1;
Node* r, * s;
char c;
r = L;
while (flag)
{
printf("请输入线性表元素:");
c = getchar();
if (c != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
}
else {
flag = 0;
}
}
}
//打印出单链表
void LinkPrint(LinkList L) {
printf("线性表为:");
while (L)
{
printf("%c", L->next->data);
L = L->next;
}
}
L->next可能为Null
修改处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
//定义链表结点的结构体
typedef struct _Node {
int data; //定义结点的数据域
struct _Node* next; //定义结点的指针域,指针域为指到本类型的指针
}Node, * LinkList;
//声明函数
InitList(LinkList* L);
void CreateFromTail(LinkList L);
void LinkPrint(LinkList L);
//主函数
int main() {
int i;
LinkList L = { 0 };
InitList(&L); //链表的初始化
CreateFromTail(L); //创建链表
LinkPrint(L); //打印链表
return 0; //修改
}
//单链表的初始化
InitList(LinkList* L) {
(*L) = (LinkList)malloc(sizeof(Node)); //创建一个头结点
(*L)->next = NULL; //并使头结点的指针域为空
//return L; 修改
}
//单链表的创建
void CreateFromTail(LinkList L)
{
int flag = 1;
Node* r, * s;
char c;
r = L;
while (flag)
{
printf("请输入线性表元素:");
c = getchar();
getchar(); //修改
if (c != '$')
{
s = (Node*)malloc(sizeof(Node));
s->next = 0; //修改
s->data = c;
r->next = s;
r = s;
}
else {
flag = 0;
}
}
}
//打印出单链表
void LinkPrint(LinkList L) {
printf("线性表为:");
while (L->next)//while (L) 修改
{
printf("%c", L->next->data);
L = L->next;
}
}