C语言编程实现单向链表建立、删除、插入、输出
时间: 2023-09-28 10:10:19 浏览: 118
以下是 C 语言实现单向链表建立、删除、插入和输出的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建链表
ListNode* createList(int* arr, int n) {
ListNode* head = NULL;
ListNode* tail = NULL;
for (int i = 0; i < n; i++) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = arr[i];
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
// 删除链表节点
ListNode* deleteNode(ListNode* head, int val) {
if (head == NULL) {
return NULL;
}
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != NULL) {
if (curr->val == val) {
prev->next = curr->next;
free(curr);
break;
} else {
prev = curr;
curr = curr->next;
}
}
ListNode* newHead = dummy->next;
free(dummy);
return newHead;
}
// 插入链表节点
ListNode* insertNode(ListNode* head, int val, int pos) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
if (head == NULL) {
return node;
}
if (pos == 0) {
node->next = head;
return node;
}
ListNode* prev = head;
ListNode* curr = head->next;
for (int i = 1; i < pos; i++) {
if (curr == NULL) {
break;
}
prev = curr;
curr = curr->next;
}
prev->next = node;
node->next = curr;
return head;
}
// 输出链表
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
printf("\n");
}
// 主函数
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
ListNode* head = createList(arr, n);
printList(head);
head = deleteNode(head, 3);
printList(head);
head = insertNode(head, 6, 2);
printList(head);
return 0;
}
```
在上面的示例代码中,我们定义了链表节点结构体 `ListNode`,其中包含了节点的值 `val` 和指向下一个节点的指针 `next`。
接着,我们实现了链表的创建、删除、插入和输出等操作。其中,创建链表时需要传入一个整型数组 `arr` 和数组的长度 `n`,然后根据数组中的元素创建链表。删除操作需要传入要删除的节点的值 `val`,然后遍历链表找到该节点并删除。插入操作需要传入要插入的节点的值 `val` 和要插入的位置 `pos`,然后遍历链表找到要插入位置的前一个节点,插入新节点并将原来的节点指针连接到新节点后面。输出操作则是遍历链表,输出每个节点的值。
最后,在主函数中我们创建了一个整型数组 `arr`,然后根据数组中的元素创建链表,并依次进行删除、插入和输出操作。
阅读全文