写一个C语言程序关于单链表上插入结点算法 (1)实验原理 在线性链表第i个元素之前插入一个数据元素x。算法思路:先生成一个包含数据元素x的新结点(用s指向它),再找到链表中第i-1个结点(用p指向它),修改这两个结点的指针即可。
时间: 2024-09-22 08:07:12 浏览: 86
在C语言中,我们可以编写如下的函数来实现向单链表在第i个位置插入节点的操作。这里假设有一个结构体`Node`代表链表节点,有`data`成员存储数据,`next`成员存储下一个节点的地址:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next; // 指向下一颗节点
} Node;
// 插入节点到链表的函数
void insertAtPosition(Node** head, int x, int i) {
if (*head == NULL || i <= 0) {
printf("Invalid input or empty list.\n");
return;
}
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = *head; // 新节点初始指向头节点
// 找到并更新第i个节点之前的节点
Node* current = *head;
for (int j = 1; j < i && current != NULL; ++j) {
current = current->next;
}
if (current == NULL) { // 如果i超过了链表长度,则插入到列表末尾
newNode->next = NULL;
} else {
newNode->next = current->next; // 更新当前节点的next指针
current->next = newNode; // 将新节点链接到当前位置
}
}
// 主函数演示如何使用insertAtPosition函数
int main() {
// 初始化链表示例
Node* head = NULL;
// ... 其他链表操作 ...
// 插入示例
int position = 3; // 插入位置
int value = 5; // 要插入的数据
insertAtPosition(&head, value, position);
// ... 继续处理链表 ...
return 0;
}
```
在这个例子中,`insertAtPosition`函数接受链表头指针、要插入的数据以及插入的位置作为参数。注意,这个函数会改变传入的链表。
阅读全文