【基础知识学习】链表的创建

链表的创建

因为对链表使用不太熟悉,学习使用数组创建了一个链表并访问,代码如下:

以后学到新的知识继续补充。

#include<stdio.h>
#include<stdlib.h>



// 节点的定义
struct node {
 int value;
 struct node* next;
};

// 创建带头节点的空链表
struct node* list_create() {//返回一个节点的指针,链表用头节点的指针表示链表
 struct node* list = (struct node*)malloc(sizeof(struct node));//使用malloc函数向堆空间申请动态空间用法:(强制返回类型转换)malloc(申请内存大小)
       //sizeof(struct node)结构体内存的大小
       //函数中每一个变量都是在栈空间中的,函数调用完后内存就回收了
       //堆空间中的变量或数组(一块内存)是永久的,直到关闭程序或主动删除
 if (list == NULL) {
  return NULL;//头节点指的链表为空,是空链表
 }
 list->next = NULL;//0
 return list;//把这块内存的首地址返回
}

// 使用数组创建一个链表
 struct node* list_create(int data[], int n) {
  //创建头节点
  struct node* list = (struct node*)malloc(sizeof(struct node));
  if (list == NULL) {
   return NULL;
  }
  
  struct node* p = list;

  for (int i = 0; i < n; i++) {
   //创建新节点,tmp为临时变量
   struct node* tmp = (struct node*)malloc(sizeof(struct node));
   //设置数据域
   tmp->value = data[i];
   //链接
   p->next = tmp;
   //p指针后移
   p = p->next;//或 p = tmp;
  }

  //注意!这里第一次写的时候又犯错误了!p->next指的是最后的节点,必然是在for循环之后产生最后的节点,这两句话当然是写在for循环外面了
  //如果写在for循环里面,最后只会打印一个数字1,因为第一次for循环的p->next已经为空并且返回,链表只储存了一个数字
  p->next = NULL;//新节点的指针域指向空
  return list;
  
 }

 //测试一下链表
 void list_visit(struct node* list) {
  if (list == NULL) {
   return;
  }

  //for(定义一个指针p指向第一个节点(头节点list,只有指向域);
  //这个节点非空(即p!=NULL);
  //每循环一次指向下一个节点)
  //这是最经典的链表循环
  //可以类比普通循环for (int i = 0, i < 5, i++)

  for (struct node* p = list->next; p; p = p->next) {
   printf("%d ", p->value);
  } 
   
 }
 
 int main(void) {
  int data[10] = { 1,2,3,4,5,6,7,8,9,10 };

  struct node* list = list_create(data, 10);//创建链表

  list_visit(list);//访问链表

  return 0;
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值