建立动态链表是C语言中常见的数据结构应用之一。以下是如何建立动态链表的完整攻略:
步骤一:定义链表结构
首先需要定义一个链表结构体,包括节点数据和指向下一个节点的指针。
typedef struct Node
{
int data;
struct Node *next;
} Node;
步骤二:创建头结点
链表的头结点是链表的入口,不存储数据,只存储链表中第一个节点的地址。
Node *head = NULL;
步骤三:添加节点
添加节点分为两种情况:添加到链表的最前面和添加到链表的中间或末尾。
在链表的最前面添加节点:
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建一个节点
newNode->data = newVal;
newNode->next = head; // 新节点的下一个节点是原来的头节点
head = newNode; // 头节点指向新节点
在链表的中间或末尾添加新节点:
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建一个节点
newNode->data = newVal;
newNode->next = NULL; // 新节点的下一个节点为 NULL
if (head == NULL) // 链表为空,则新节点为头节点
{
head = newNode;
}
else
{
Node *temp = head;
while (temp->next != NULL) // 找到最后一个节点
{
temp = temp->next;
}
temp->next = newNode; // 将新节点添加到最后一个节点的后面
}
步骤四:删除节点
删除节点时需要遍历链表,找到要删除的节点,并将它的前一个节点指向它的下一个节点,然后释放内存。
Node *temp = head; // 从头节点开始遍历
if (temp != NULL && temp->data == delVal) // 如果要删除的是头节点
{
head = temp->next; // 头节点指向下一个节点
free(temp); // 释放要删除节点的内存
return;
}
Node *prev = NULL;
while (temp != NULL && temp->data != delVal)
{
prev = temp; // 找到要删除节点的前一个节点
temp = temp->next; // 指向当前节点的下一个节点
}
if (temp == NULL) // 如果链表中没有该节点
{
return;
}
prev->next = temp->next; // 前一个节点指向要删除节点的下一个节点
free(temp); // 释放要删除节点的内存
示例一
假设要创建一个包含 1、2、3 三个元素的链表:
Node *head = NULL;
// 添加第一个节点
Node *node1 = (Node *)malloc(sizeof(Node));
node1->data = 1;
node1->next = NULL;
head = node1;
// 添加第二个节点
Node *node2 = (Node *)malloc(sizeof(Node));
node2->data = 2;
node2->next = NULL;
node1->next = node2;
// 添加第三个节点
Node *node3 = (Node *)malloc(sizeof(Node));
node3->data = 3;
node3->next = NULL;
node2->next = node3;
示例二
假设要从一个包含 1、2、3 三个元素的链表中删除元素 2:
Node *temp = head; // 从头节点开始遍历
if (temp != NULL && temp->data == 2) // 如果要删除的是头节点
{
head = temp->next; // 头节点指向下一个节点
free(temp); // 释放要删除节点的内存
return;
}
Node *prev = NULL;
while (temp != NULL && temp->data != 2)
{
prev = temp; // 找到要删除节点的前一个节点
temp = temp->next; // 指向当前节点的下一个节点
}
if (temp == NULL) // 如果链表中没有该节点
{
return;
}
prev->next = temp->next; // 前一个节点指向要删除节点的下一个节点
free(temp); // 释放要删除节点的内存
以上就是关于如何建立动态链表的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言如何建立动态链表问题 - Python技术站