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("申请空间失败
");
    exit(-1);
  }

  L = Head;
  L->next = NULL;

  for(int i=0;i<3;i++){
    // 分配第一个节点
    LNew = (Node *)malloc(sizeof(Node));
    // 判断是否有足够内存空间
    if(LNew == NULL){
      printf("申请空间失败
");
      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("申请空间失败
");
    exit(-1);
  }

  L = Head;
  L->next = NULL;

  for(int i=0;i<3;i++){
    // 分配第一个节点
    LNew = (Node *)malloc(sizeof(Node));
    // 判断是否有足够内存空间
    if(LNew == NULL){
      printf("申请空间失败
");
      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
",p->data);
    p = p->next;
  }

  return 0;
}

原文地址:https://www.cnblogs.com/xiaomingzaixian/p/9395860.html