c语言链表尾部插入法
时间: 2023-12-21 08:30:28 浏览: 114
链表尾部插入法是一种常见的链表操作方法,可以在链表的尾部插入新的节点。下面是一个C语言的链表尾部插入法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct Node {
char data[100]; // 节点数据
struct Node *next; // 指向下一个节点的指针
} Node;
// 定义链表结构体
typedef struct List {
Node *head; // 指向链表头节点的指针
Node *tail; // 指向链表尾节点的指针
} List;
// 初始化链表
void initList(List *list) {
list->head = NULL;
list->tail = NULL;
}
// 在链表尾部插入新节点
void insertNode(List *list, char *data) {
// 创建新节点
Node *newNode = (Node *)malloc(sizeof(Node));
strcpy(newNode->data, data);
newNode->next = NULL;
// 如果链表为空,则新节点既是头节点也是尾节点
if (list->head == NULL) {
list->head = newNode;
list->tail = newNode;
} else {
// 否则将新节点插入到尾节点之后,并更新尾节点指针
list->tail->next = newNode;
list->tail = newNode;
}
}
// 在链表中查找指定数据的节点
Node *findNode(List *list, char *data) {
Node *p = list->head;
while (p != NULL) {
if (strcmp(p->data, data) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
// 删除链表中指定数据的节点
void deleteNode(List *list, char *data) {
Node *p = list->head;
Node *prev = NULL;
while (p != NULL) {
if (strcmp(p->data, data) == 0) {
// 如果要删除的节点是头节点,则更新头节点指针
if (p == list->head) {
list->head = p->next;
}
// 如果要删除的节点是尾节点,则更新尾节点指针
if (p == list->tail) {
list->tail = prev;
}
// 删除节点
if (prev != NULL) {
prev->next = p->next;
}
free(p);
return;
}
prev = p;
p = p->next;
}
}
// 反转链表
void reverseList(List *list) {
Node *p = list->head;
Node *prev = NULL;
while (p != NULL) {
Node *next = p->next;
p->next = prev;
prev = p;
p = next;
}
list->tail = list->head;
list->head = prev;
}
// 测试代码
int main() {
List list;
initList(&list);
// 插入节点
insertNode(&list, "hello");
insertNode(&list, "world");
insertNode(&list, "c");
insertNode(&list, "language");
// 查找节点
Node *node = findNode(&list, "world");
if (node != NULL) {
printf("find node: %s\n", node->data);
} else {
printf("node not found\n");
}
// 删除节点
deleteNode(&list, "c");
// 反转链表
reverseList(&list);
// 遍历链表并输出节点数据
Node *p = list.head;
while (p != NULL) {
printf("%s ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
阅读全文