用C语言写在带头节点的单链表h中第i个数据元素之前插入一个数据元素
时间: 2024-10-27 17:02:40 浏览: 41
在C语言中,要在带头节点的单链表`h`中第`i`个数据元素之前插入一个新的数据元素,你需要首先创建一个新的节点,然后更新指针以便将新节点连接到现有链表。以下是步骤:
1. 定义结构体表示链表节点,通常包含数据域`data`和下一个节点的指针`next`。
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
```
2. 创建一个函数,例如`insertBeforeNode(h, i, newNodeData)`,它接受头节点`h`、要插入的位置索引`i`以及新节点的数据`newNodeData`作为参数。
```c
void insertBeforeNode(ListNode* h, int i, int newNodeData) {
// 检查是否为空链表
if (h == NULL) return;
// 新建一个节点并存储数据
ListNode* newNode = malloc(sizeof(ListNode));
newNode->data = newNodeData;
newNode->next = NULL;
// 遍历链表找到位置 `i`
for (int count = 0; h != NULL && count < i - 1; count++) {
h = h->next;
}
// 如果找到了位置 `i`,将新节点插入
if (h != NULL) {
newNode->next = h->next;
h->next = newNode;
} else {
// 插入在第一个位置时,如果索引小于1则插入在头节点之后
if (i <= 1) {
newNode->next = h;
h = newNode;
}
}
}
```
这个函数会检查链表是否为空,创建新节点,然后遍历链表找到适当的位置插入新节点。注意这里假设`i`从1开始计数,即`i=1`代表第一个元素。
阅读全文