📅  最后修改于: 2023-12-03 15:37:47.344000             🧑  作者: Mango
在链表中插入新节点是一个常见的操作,通常有两种方法:在链表的头部插入节点和在链表的尾部插入节点。但有时候,我们需要在链表的特定位置插入节点,本文将介绍如何在链表的特定位置插入节点。
我们可以首先定义一个链表结构体:
typedef struct Node {
int data;
struct Node* next;
} Node;
假设我们已经定义好了链表的头节点 head
,我们需要定义一个插入节点的函数:
void insertNode(Node* head, int index, int data) {
}
函数接收三个参数:链表头节点 head
,插入节点的位置 index
和插入节点的数据 data
。
首先我们需要找到插入位置的前一个节点 prev
,然后将新节点 newNode
插入到 prev
和 prev->next
之间。如果链表长度小于插入位置 index
,则不插入节点。
完整代码如下:
void insertNode(Node* head, int index, int data) {
int i = 0;
Node* p = head;
while (p && i < index - 1) {
p = p->next;
i++;
}
if (i != index - 1 || !p) {
printf("Error: index out of bounds\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
下面是一个示例程序,我们在链表的第三个位置插入一个值为5的节点。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
void insertNode(Node* head, int index, int data) {
int i = 0;
Node* p = head;
while (p && i < index - 1) {
p = p->next;
i++;
}
if (i != index - 1 || !p) {
printf("Error: index out of bounds\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
void printList(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
Node* n1 = (Node*)malloc(sizeof(Node));
n1->data = 1;
n1->next = NULL;
head->next = n1;
Node* n2 = (Node*)malloc(sizeof(Node));
n2->data = 2;
n2->next = NULL;
n1->next = n2;
Node* n3 = (Node*)malloc(sizeof(Node));
n3->data = 3;
n3->next = NULL;
n2->next = n3;
insertNode(head, 3, 5);
printList(head);
return 0;
}
运行结果:
1 2 3 5
在链表的特定位置插入节点需要注意以下几点:
通过以上几点的处理,我们就能够在链表的特定位置插入节点了。