LINUX C 链表实现
时间: 2023-07-11 11:19:30 浏览: 98
在Linux C中,链表是一种常用的数据结构,可以用来实现动态数据的存储和管理。下面是一个简单的链表实现,包括链表的创建、插入、删除和遍历等操作。
```c
#include <stdio.h>
#include <stdlib.h>
/* 定义链表节点结构体 */
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
/* 创建链表 */
Node* createList() {
Node* head = NULL;
Node* tail = NULL;
int value;
printf("请输入链表中的元素(输入-1结束):\n");
while (1) {
scanf("%d", &value);
if (value == -1) {
break;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
}
else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
/* 在链表头部插入节点 */
Node* insertAtHead(Node* head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = head;
return newNode;
}
/* 在链表尾部插入节点 */
Node* insertAtTail(Node* head, int value) {
if (head == NULL) {
return insertAtHead(head, value);
}
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
current->next = newNode;
return head;
}
/* 删除链表中第一个匹配的节点 */
Node* deleteNode(Node* head, int value) {
if (head == NULL) {
return NULL;
}
if (head->data == value) {
Node* temp = head;
head = head->next;
free(temp);
return head;
}
Node* current = head;
while (current->next != NULL) {
if (current->next->data == value) {
Node* temp = current->next;
current->next = current->next->next;
free(temp);
return head;
}
current = current->next;
}
return head;
}
/* 遍历链表 */
void traverseList(Node* head) {
printf("链表中的元素为:\n");
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Node* head = createList();
traverseList(head);
head = insertAtHead(head, 0);
traverseList(head);
head = insertAtTail(head, 6);
traverseList(head);
head = deleteNode(head, 3);
traverseList(head);
return 0;
}
```
在上面的示例中,我们使用链表来实现一个简单的列表,包括在头部插入节点、尾部插入节点和删除节点等操作。在创建链表时,我们使用循环读入用户输入的数据,直到输入-1为止。在插入和删除操作时,我们使用了链表的基本操作,包括遍历、插入和删除等。
阅读全文