软件平台:VS2019 语言:C语言
一:代码实现
#include<stdio.h>
#include<stdlib.h>
/*
要构建的链表结构:Headp[地址]->[2][地址]->[4][地址]->[6][NULL]
我们使用临时变量来创建链表
我们这里使用的是尾插法
*/
struct Node {
int date;
struct Node* Link;
};
int main()
{
/*************定义一个头指针***************/
struct Node* Headp;
Headp = NULL;//指针 A 初始化为 NULL。这意味着它当前不指向任何有效的内存地址,也就是说,链表是空的,没有任何节点
/*************使用临时变量来往常节点的插入与遍历***************/
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));//这里我们使用动态内存的方法去创建
temp->date = 2;//temp去存放头节点
temp->Link = NULL;
Headp = temp;//将头节点的地址给头指针
//使用临时变量创建第二个节点
struct Node* temp1 = (struct Node*)malloc(sizeof(struct Node));
temp1->date = 4;
temp->Link = temp1;
temp1->Link = NULL;
//使用临时变量创建第三个节点
struct Node* temp2 = (struct Node*)malloc(sizeof(struct Node));
temp2->date = 6;
temp2->Link = NULL;
temp1->Link = temp2;
/*************创建节点完成,并对四个节点进行连接,现在开始对四个节点进行遍历***************/
struct Node* ListTraver;//定义一个变量进行遍历
ListTraver = NULL;
ListTraver = Headp;//这行代码将Headp的值(即链表的第一个节点的地址)赋给ListTraver。这意味着ListTraver现在也指向了链表的第一个节点,这样你就可以使用ListTraver遍历整个链表,从头节点开始。
int i = 0;
while (ListTraver != NULL) {
printf("%d,%d\n", ListTraver, ListTraver->date);
//这个时候必须要把这段代码放在ListTraver = ListTraver->Link;之前
/*
如果我们放在后面的话,因为已经遍历到下一个节点了,输出结果是
第-278648672个节点的地址是4,它的值是1447556424
第0个节点的地址是6, 它的值是510654672
*/
ListTraver = ListTraver->Link;
/*
date:该组件存储与节点关联的数据(在本例中为整数)。
Link:该组件是指向链表中下一个节点的指针。它用于建立列表中节点之间的连接。
ListTraver->Link以下是代码中发生的情况的详细说明:
最初,ListTraver被设置为指向Headp链表中的第一个节点( )。
在循环内部while,ListTraver->Link用于访问当前节点(ListTraver)的“Link”指针,
该指针指向列表中的下一个节点。
ListTraver然后更新为指向下一个节点(即ListTraver = ListTraver->Link;),有效地移
动到列表中的下一个节点。
这个过程一直持续到ListTraver变成NULL,表示链表结束。
因此,ListTraver->Link用于通过从一个节点移动到下一个节点直到到达列表末尾来遍历链表。
*/
//将链表的各个节点的值进行打印
/*++i; //这段代码放在后面报错*/
/*printf("第%d个节点的地址是%d,它的值是%d\n", ListTraver->Link, ListTraver->date);*/
}
return 0;
}
二:结果
三:总结
对每一段代码都进行了分析,对每一个会报错的地方都进行了思考,虽然是比较简单的代码也不断激励着笔者在编程的路上越走越远