用c语言试编写在无头结点的单链表上实现将元素x插入到线性表的第i个位置。
时间: 2023-05-22 09:05:52 浏览: 66
可以实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* insert(Node* head, int i, int x) {
if (i < 1) {
printf("Error: invalid index\n");
return head;
}
Node* new_node = malloc(sizeof(Node));
new_node->data = x;
if (i == 1) { // insert at the beginning
new_node->next = head;
head = new_node;
} else { // insert after the i-1-th node
Node* prev_node = head;
for (int j = 1; j < i - 1 && prev_node->next; j++) {
prev_node = prev_node->next;
}
if (!prev_node->next && i > 2) { // i is out of range
printf("Error: invalid index\n");
free(new_node);
return head;
}
new_node->next = prev_node->next;
prev_node->next = new_node;
}
return head;
}
void print_list(Node* head) {
printf("List:");
for (Node* cur = head; cur; cur = cur->next) {
printf(" %d", cur->data);
}
printf("\n");
}
int main() {
Node* head = NULL;
head = insert(head, 1, 1);
head = insert(head, 2, 2);
head = insert(head, 1, 0);
head = insert(head, 4, 4);
head = insert(head, 3, 3);
print_list(head);
return 0;
}
```
这是一个简单的单链表实现,`insert` 函数实现了将元素插入到第 `i` 个位置的功能。`print_list` 函数用于打印链表中的所有元素。主函数用于演示插入操作和打印结果。