头插法&尾插法建立单链表
可运行代码
#include <stdio.h> #include <stdlib.h> typedef int Elemtype; //结构体的定义 struct LNode{ Elemtype data;//数据域,存储数据 struct LNode *next;//指针域,存储指针,存放后继节点信息 }LNode; typedef struct LNode* Linklist;//定义结构体指针型变量,将结构体指针等价于Linklist //头插法建立链表 void CreateListHead(Linklist L, int n){//n为创建链表的大小空间 Linklist p; L->next = NULL;//开始时,该节点的指针域为空,也就是下一个节点为空,不包含其他节点 for(int i = 0; i < n; i ++){//定义含有i个空间大小的空间 int x; scanf("%d",&x); p = (struct LNode *)malloc(sizeof(struct LNode));//申请足够大小的空间,将该空间的基地址赋值给p p->data = x;//在数据域中存储数据 p->next = L->next; L->next = p;//重新定义头指针的下一个,为当前的开始位置 } } //尾插法建立链表 void CreateListTail(Linklist L,int n){ Linklist p,r; r = L; for(int i = 0; i < n; i++){ int x; scanf("%d",&x); p = (struct LNode *)malloc(sizeof(struct LNode)); p->data = x;//在数据域中存储数据 r->next = p; r = p;//r指向新的表尾结点 } r->next = NULL; //尾结点指针置空 } //链表的遍历输出 void TraverseList(Linklist L){ Linklist p, q; p = L;//将头指针赋值给p while(p->next != NULL){ q = p->next; printf("%d ", q->data); p = p->next; } } int main() { Linklist L = (struct LNode*) malloc(sizeof(struct LNode)); int n; scanf("%d",&n); //CreateListHead(L, n); CreateListTail(L,n); TraverseList(L); return 0; }

浙公网安备 33010602011771号