C语言实现单链表(带头节点)
C语言在实现单链表存储时需要注意的几点:
1.定义结构体,typedef:用于给结构体另命名
// 定义结构体类型 typedef struct Node{ int data; struct Node *next; }Node,*LinkedList;
2.链表初始化
// 链表初始化 LinkedList LinkedListInit(){ Node *Head,*L,*LNew; // 申请节点空间 Head = (Node *)malloc(sizeof(Node)); // 判断是否有足够内存空间 if(Head == NULL){ printf("申请空间失败\n"); exit(-1); } L = Head; L->next = NULL; for(int i=0;i<3;i++){ // 分配第一个节点 LNew = (Node *)malloc(sizeof(Node)); // 判断是否有足够内存空间 if(LNew == NULL){ printf("申请空间失败\n"); exit(-1); } LNew->data = i; L->next = LNew; LNew->next = NULL; L = LNew; } return Head; }
具体源码demo.c
#include <stdio.h> #include <malloc.h> #include <stdlib.h> // 定义结构体类型 typedef struct Node{ int data; struct Node *next; }Node,*LinkedList; // 链表初始化 LinkedList LinkedListInit(){ Node *Head,*L,*LNew; // 申请节点空间 Head = (Node *)malloc(sizeof(Node)); // 判断是否有足够内存空间 if(Head == NULL){ printf("申请空间失败\n"); exit(-1); } L = Head; L->next = NULL; for(int i=0;i<3;i++){ // 分配第一个节点 LNew = (Node *)malloc(sizeof(Node)); // 判断是否有足够内存空间 if(LNew == NULL){ printf("申请空间失败\n"); exit(-1); } LNew->data = i; L->next = LNew; LNew->next = NULL; L = LNew; } return Head; } int main(int argc, char const *argv[]) { /* code */ Node *p; p = LinkedListInit(); p = p->next; while(p != NULL){ printf("%d\n",p->data); p = p->next; } return 0; }