定义一个链表以及维持链表状况的结构体C语言代码示例
时间: 2023-11-02 07:17:34 浏览: 96
c语言链表实例
链表是一种常用的数据结构,它由一个个节点组成,每个节点包含数据和指向下一个节点的指针。以下是一个定义链表以及维护链表状态的结构体的C语言代码示例:
```c
//定义链表节点结构体
struct ListNode {
int val; //节点数据
struct ListNode *next; //指向下一个节点的指针
};
//定义链表结构体
struct LinkedList {
struct ListNode *head; //指向链表头节点的指针
struct ListNode *tail; //指向链表尾节点的指针
int size; //链表大小
};
//初始化链表
void initList(struct LinkedList *list) {
list->head = NULL;
list->tail = NULL;
list->size = 0;
}
//在链表尾部插入一个节点
void addNode(struct LinkedList *list, int val) {
struct ListNode *newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
if(list->tail == NULL) {
list->head = newNode;
list->tail = newNode;
} else {
list->tail->next = newNode;
list->tail = newNode;
}
list->size++;
}
//遍历链表
void traverseList(struct LinkedList *list) {
struct ListNode *node = list->head;
while(node != NULL) {
printf("%d ", node->val);
node = node->next;
}
}
//删除链表中某个节点
void deleteNode(struct LinkedList *list, int val) {
struct ListNode *node = list->head;
struct ListNode *prev = NULL;
while(node != NULL) {
if(node->val == val) {
if(prev == NULL) {
list->head = node->next;
} else {
prev->next = node->next;
}
if(list->tail == node) {
list->tail = prev;
}
free(node);
node = NULL;
list->size--;
break;
} else {
prev = node;
node = node->next;
}
}
}
```
以上是链表及其维护状态的C语言代码示例,包括链表节点结构体、链表结构体、初始化链表、在链表尾部插入一个节点、遍历链表和删除链表中某个节点。
阅读全文