创建一个链表实现头插入尾删除C语言
时间: 2024-09-15 22:10:02 浏览: 47
创建一个链表实现头插入尾删除的基本思路是定义一个链表结构,并提供两个基本操作:在链表头部插入节点和从链表尾部删除节点。下面是一个简单的实现示例:
首先,定义链表节点和链表结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域,指向下一个节点
} Node;
// 定义链表结构体
typedef struct LinkedList {
Node *head; // 指向链表头部的指针
Node *tail; // 指向链表尾部的指针
int size; // 链表当前元素数量
} LinkedList;
```
接下来,创建链表并实现头插入和尾删除操作:
```c
// 初始化链表
void initLinkedList(LinkedList *list) {
list->head = NULL;
list->tail = NULL;
list->size = 0;
}
// 在链表头部插入节点
void insertAtHead(LinkedList *list, int value) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
newNode->next = list->head;
list->head = newNode;
if (list->tail == NULL) {
// 如果是空链表,头插入后尾节点也指向这个节点
list->tail = newNode;
}
list->size++;
}
// 从链表尾部删除节点
int deleteAtTail(LinkedList *list) {
if (list->tail == NULL) {
// 如果链表为空,直接返回-1或其他错误码
return -1;
}
Node *current = list->head;
Node *prev = NULL;
// 遍历到链表尾部
while (current->next != NULL) {
prev = current;
current = current->next;
}
int value = current->data;
// 如果当前节点是头节点
if (prev == NULL) {
list->head = NULL;
} else {
prev->next = NULL;
}
// 删除尾节点,并将尾指针指向当前节点的前一个节点
list->tail = prev;
free(current);
list->size--;
return value;
}
```
以上代码展示了如何创建一个链表以及如何实现头插入和尾删除的基本操作。在实际应用中,还需要考虑链表的其他操作,比如查找、遍历、头删除、尾插入等。
阅读全文