用C语言写,在带头结点的单链表中的第i个位置插入值为x的结点,如果插入位置不合理,在本函数中输出“插入位置错误”并换行
时间: 2024-09-27 15:07:18 浏览: 37
在C语言中,我们可以创建一个函数来实现这个功能。首先,我们需要定义一个结构体表示链表节点,然后提供一个函数`insertNode`来进行操作。如果插入位置i超出链表长度,我们将返回错误信息。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 插入节点到链表的函数
void insertNode(Node** head, int x, int i) {
if (*head == NULL || i <= 0) {
printf("插入位置错误\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = *head;
// 遍历链表找到插入位置
for (int j = 1; j < i && *head != NULL; j++, *head = (*head)->next) {}
// 如果到达链表末尾还没插入,说明位置不合理
if (*head == NULL) {
printf("插入位置错误\n");
free(newNode);
return;
}
// 将新节点插入
(*head)->next = newNode;
}
// 示例用法
int main() {
Node* head = NULL;
insertNode(&head, 5, 1); // 在第一个位置插入5
insertNode(&head, 10, 4); // 插入位置合理
insertNode(&head, 15, 7); // 插入位置错误
return 0;
}
```
在这个示例中,`insertNode`函数会检查输入的头指针是否为空以及插入位置是否合法。如果不合理,它将释放分配给新节点的内存并打印错误消息。
阅读全文