c语言带头结点的单链表在指定位置插入
时间: 2024-03-23 11:16:28 浏览: 18
假设定义的链表结构体为:
```c
struct ListNode {
int val;
struct ListNode *next;
};
```
插入操作可以分为两种情况:
1. 在链表头部插入节点
2. 在链表中间或尾部插入节点
对于第一种情况,我们需要先创建一个新节点,然后将它的 next 指针指向原来的头节点,再将头指针指向新节点即可。
```c
void insertAtHead(struct ListNode** head, int val) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = (*head);
(*head) = newNode;
}
```
对于第二种情况,我们需要先遍历找到指定位置的前一个节点,然后创建新节点,将新节点的 next 指针指向前一个节点的 next 指针所指向的节点,再将前一个节点的 next 指针指向新节点即可。
```c
void insertAtIndex(struct ListNode** head, int val, int index) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
struct ListNode* prev = (*head);
for (int i = 0; i < index - 1 && prev != NULL; i++) {
prev = prev->next;
}
if (prev == NULL) return;
newNode->next = prev->next;
prev->next = newNode;
}
```
需要注意的是,当插入位置是链表的最后一个节点时,我们需要特殊处理,将新节点的 next 指针指向 NULL。