介绍
每个节点都会有data数据域和指针域
data数据域可以存放该节点对应的任何数据类型值比如int char等
next指针域是指向列表中下一个节点的引用指针
接下来我们需要给这些节点的data数据域赋值,分别为10,20,30现在每个节点中都有对应的值
接下来我们应该将这些节点连接起来
首先我们使head的next指向middle
这会使middle的内存地址2024存储在head的next里,那么我们使用head的next即可访问到middle
再使middle的next指向last即3024
last的后续没有节点,所以last的next为Null
代码实现
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
int main() {
struct Node *head, *middle, *last;
// 分配内存
head = (struct Node*)malloc(sizeof(struct Node));
middle = (struct Node*)malloc(sizeof(struct Node));
last = (struct Node*)malloc(sizeof(struct Node));
// 设置节点数据
head->data = 10;
middle->data = 20;
last->data = 30;
// 链接节点
head->next = middle;
middle->next = last;
last->next = NULL;
// 遍历链表并打印数据
struct Node *temp = head;
while(temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
// 释放内存
free(head);
free(middle);
free(last);
return 0;
}
头插法
代码实现
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
// 初始化头指针
struct Node* head = NULL;
// 插入新节点的函数
void Insert(int x) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("Memory allocation failed\n");
return;
}
newNode->data = x;
newNode->next = head;
head = newNode;
}
int main() {
// 插入初始节点
Insert(10);
Insert(20);
Insert(30);
// 遍历链表并打印数据
struct Node *temp = head;
while(temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
// 释放内存
temp = head; // 先从头开始释放
while (temp != NULL) {
struct Node *nextNode = temp->next; // 记录下一个节点
free(temp); // 释放当前节点
temp = nextNode; // 移动到下一个节点
}
return 0;
}
解释
尾插法
代码实现
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
// 全局头指针
struct Node* head = NULL;
// 在链表末尾插入新节点
void inserLast(int x) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = x;
newNode->next = NULL;
if (head == NULL) {
head = newNode; // 如果链表为空,直接将新节点作为头节点
} else {
struct Node* lastNode = head;
while (lastNode->next != NULL) {
lastNode = lastNode->next; // 遍历到链表的最后一个节点
}
lastNode->next = newNode; // 将新节点添加到链表末尾
}
}
int main() {
// 插入初始节点
inserLast(10);
inserLast(20);
inserLast(30);
// 遍历链表并打印数据
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next; // 移动到下一个节点
}
printf("\n");
// 释放内存
temp = head; // 先从头开始释放
while (temp != NULL) {
struct Node* nextNode = temp->next; // 记录下一个节点
free(temp); // 释放当前节点
temp = nextNode; // 移动到下一个节点
}
return 0;
}
解释
删除
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义节点结构体
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
// 全局头指针
struct Node* head = NULL;
bool deleteNode(struct Node **head, int Key)
{
struct Node *temp;
if((*head)->data == Key) {
temp =*head;
*head = (*head)->next;
free(temp);
return true;
}else{
struct Node *pre = *head;
while(pre->next != NULL){
if(pre->next->data == Key)
{
temp = pre->next ;
pre->next = pre->next->next ;
free(temp);
return true;
}else{
pre = pre->next ;
}
return false;
}
}
}
// 在链表末尾插入新节点
void inserLast(int x) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = x;
newNode->next = NULL;
if (head == NULL) {
head = newNode; // 如果链表为空,直接将新节点作为头节点
} else {
struct Node* lastNode = head;
while (lastNode->next != NULL) {
lastNode = lastNode->next; // 遍历到链表的最后一个节点
}
lastNode->next = newNode; // 将新节点添加到链表末尾
}
}
int main() {
// 插入初始节点
inserLast(10);
inserLast(20);
inserLast(30);
// 遍历链表并打印数据
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next; // 移动到下一个节点
}
printf("\n");
deleteNode(&head,20);
// 遍历链表并打印数据
temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next; // 移动到下一个节点
}
printf("\n");
// 释放内存
temp = head; // 先从头开始释放
while (temp != NULL) {
struct Node* nextNode = temp->next; // 记录下一个节点
free(temp); // 释放当前节点
temp = nextNode; // 移动到下一个节点
}
return 0;
}
解释
搜索
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义节点结构体
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
struct Node* searchNode(struct Node*head, int key)
{
struct Node* temp = head;
while(temp != NULL){
if(temp->data == key){
return temp;
}
temp = temp->next ;
}
return NULL;
}
// 全局头指针
struct Node* head = NULL;
bool deleteNode(struct Node **head, int Key)
{
struct Node *temp;
if((*head)->data == Key) {
temp =*head;
*head = (*head)->next;
free(temp);
return true;
}else{
struct Node *pre = *head;
while(pre->next != NULL){
if(pre->next->data == Key)
{
temp = pre->next ;
pre->next = pre->next->next ;
free(temp);
return true;
}else{
pre = pre->next ;
}
return false;
}
}
}
// 在链表末尾插入新节点
void inserLast(int x) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = x;
newNode->next = NULL;
if (head == NULL) {
head = newNode; // 如果链表为空,直接将新节点作为头节点
} else {
struct Node* lastNode = head;
while (lastNode->next != NULL) {
lastNode = lastNode->next; // 遍历到链表的最后一个节点
}
lastNode->next = newNode; // 将新节点添加到链表末尾
}
}
int main() {
int i;
// 插入初始节点
inserLast(10);
inserLast(20);
inserLast(30);
// 遍历链表并打印数据
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next; // 移动到下一个节点
}
printf("\n");
i = searchNode(head, 30);
printf("%d\n", i);
// 释放内存
temp = head; // 先从头开始释放
while (temp != NULL) {
struct Node* nextNode = temp->next; // 记录下一个节点
free(temp); // 释放当前节点
temp = nextNode; // 移动到下一个节点
}
return 0;
}
解释
标签:Node,学习,head,struct,temp,next,链表,节点 From: https://blog.csdn.net/2301_79790385/article/details/143244690