用c语言创建链表、打印链表内容、插入元素和删除指定位置的元素。
时间: 2024-09-18 19:11:23 浏览: 37
在C语言中,我们可以使用结构体和指针来创建链表。这里有一个简单的示例,包含了创建链表、打印链表以及插入和删除元素的操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct Node {
int data;
struct Node* next; // 指向下一个节点的指针
};
// 创建链表
struct Node* createList() {
struct Node* head = NULL;
int data;
printf("请输入数据(结束输入请输入-1):");
while(scanf("%d", &data) == 1 && data != -1) { // 读取用户输入直到遇到-1
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); // 动态分配内存
newNode->data = data;
newNode->next = head; // 新结点链接到头部
head = newNode;
}
return head;
}
// 打印链表
void printList(struct Node* head) {
if (head == NULL) {
printf("链表为空\n");
} else {
struct Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n"); // 结尾表示空
}
}
// 插入元素
void insertElement(struct Node** head, int pos, int value) {
if (*head == NULL) {
*head = (struct Node*)malloc(sizeof(struct Node));
(*head)->data = value;
(*head)->next = NULL;
} else {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = NULL;
int count = 1;
struct Node* current = *head;
while(count < pos - 1 && current->next != NULL) {
current = current->next;
count++;
}
if(current->next != NULL) {
newNode->next = current->next;
current->next = newNode;
} else {
printf("插入位置无效\n");
}
}
}
// 删除指定位置元素
void deleteElement(struct Node** head, int pos) {
if(*head == NULL || pos <= 0) {
printf("链表为空或删除位置无效\n");
return;
}
int count = 1;
struct Node* current = *head;
struct Node* previous = NULL;
while(count < pos && current != NULL) {
previous = current;
current = current->next;
count++;
}
if(count == pos && current != NULL) {
previous->next = current->next;
free(current);
} else {
printf("删除位置无效\n");
}
}
int main() {
struct Node* head = createList();
if(head != NULL) {
printList(head);
int pos, value;
printf("请输入要插入的位置和值:\n");
scanf("%d %d", &pos, &value);
insertElement(&head, pos, value);
printList(head);
printf("请输入要删除的位置:\n");
scanf("%d", &pos);
deleteElement(&head, pos);
printList(head);
}
return 0;
}
```
这个程序首先创建链表,然后根据用户的指令插入和删除元素,并在每个步骤之后都打印链表内容。注意,这个示例假设位置从1开始计数。如果用户输入的删除位置超出范围或链表为空,程序会给出提示信息。
阅读全文