用c语言表达请按尾插法创建单链表,并在指定位置插入元素,输出插入完成后的链表 输入 输入包括三行 第一行输入单链表的长度 第二行输入单链表的元素 第三行输入插入的位置和插入的值 输出 输出插入完成后的单链表,若插入失败,输出-1。
时间: 2024-09-16 19:03:02 浏览: 44
在 C 语言中,我们可以使用结构体来表示链表节点,并使用指针来操作链表。以下是按尾插法在指定位置插入元素的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 插入节点到链表的函数
void insertAtPosition(Node** head, int position, int value) {
if (*head == NULL) { // 如果链表为空,创建新头结点
*head = (Node*)malloc(sizeof(Node));
(*head)->data = value;
(*head)->next = NULL;
} else {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新的节点
newNode->data = value;
newNode->next = NULL;
Node* current = *head;
for (int i = 0; i < position - 1 && current != NULL; ++i) {
current = current->next;
}
if (current == NULL) { // 如果位置超出链表范围,返回-1
printf("-1\n");
return;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 打印链表
void printList(Node* head) {
if (head == NULL) {
printf("空链表\n");
return;
}
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
int length;
scanf("%d", &length); // 输入链表长度
Node* head = NULL; // 初始化链表头指针
if (length > 0) {
for (int i = 0; i < length; ++i) {
int data;
scanf("%d", &data);
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (i == 0) { // 若这是第一个节点,则直接设为头节点
head = node;
} else {
Node* prev = head;
while (prev->next != NULL) {
prev = prev->next;
}
prev->next = node;
}
}
printList(head); // 输出原始链表
}
int insertPos, value;
scanf("%d %d", &insertPos, &value);
insertAtPosition(&head, insertPos, value); // 插入节点
printList(head); // 输出插入后的链表
return 0;
}
```
在这个代码中,首先读取链表长度、节点数据以及插入位置和值。接着创建链表并打印,然后根据给定位置插入新节点并再次打印链表。如果插入位置无效,会输出-1。
阅读全文