使用C语言创建一个单链表L,依次插入11、12、13、14、15、16、17、18八个元素,输出单链表L各结点的数据域。 查找并输出14是链表L中的第几个元素,然后删除该元素,输出删除后的链表L。
时间: 2024-09-28 18:07:03 浏览: 50
在C语言中,我们可以创建一个简单的单链表结构体和一些函数来实现这个需求。首先,我们定义一个链表节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点并插入值
Node* insert(Node* head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = head;
return newNode;
}
// 插入多个元素到链表
void insertMultiple(Node** head, int values[], int size) {
for (int i = 0; i < size; i++) {
*head = insert(*head, values[i]);
}
}
// 打印链表所有节点数据
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 查找特定元素的位置并返回索引
int findElementIndex(Node* head, int target) {
int index = 0;
Node* current = head;
while (current != NULL) {
if (current->data == target)
return index;
current = current->next;
index++;
}
return -1; // 如果未找到目标,返回-1
}
// 删除指定位置的元素
void deleteElement(Node** head, int position) {
if (*head == NULL || position < 0)
return;
Node* temp = *head;
Node* prev = NULL;
if (position == 0) {
*head = temp->next;
free(temp);
return;
}
for (int i = 1; i < position && temp != NULL; i++) {
prev = temp;
temp = temp->next;
}
if (temp == NULL)
return;
prev->next = temp->next;
free(temp);
}
int main() {
int values[] = {11, 12, 13, 14, 15, 16, 17, 18};
int size = sizeof(values) / sizeof(values[0]);
Node* head = NULL;
insertMultiple(&head, values, size);
printf("Original list: ");
printList(head);
int elementToFind = 14;
int index = findElementIndex(head, elementToFind);
printf("Element %d is at index %d.\n", elementToFind, index);
deleteElement(&head, index);
printf("After deleting %d: \n", elementToFind);
printList(head);
return 0;
}
```
这个程序首先创建一个空链表,然后添加给定的元素,接着查找14的位置并删除它,最后打印出删除后的链表。注意,数组索引从0开始,所以查找14的实际索引是13。
阅读全文