用c语言创建一个n个结点的双向链表头节点为h并执行插入操作
时间: 2024-09-13 15:11:42 浏览: 42
c语言-c语言编程基础之leetcode题解第19题删除链表的倒数第N个结点.zip
在C语言中,我们可以使用结构体和指针来创建一个双向链表。首先,我们需要定义一个双向链表节点的结构:
```c
typedef struct Node {
int data; // 节点数据
struct Node* prev; // 指向前一个节点的指针
struct Node* next; // 指向下一个节点的指针
} Node;
```
然后,我们创建一个头节点`h`:
```c
Node* h = (Node*)malloc(sizeof(Node)); // 分配内存
h->data = 0; // 初始化头节点的数据
h->prev = NULL; // 头节点前驱为空
h->next = NULL; // 头节点后继也为空
```
接下来,我们添加插入操作。假设我们要在指定位置`pos`插入一个新的节点`new_node`,数据为`value`:
```c
// 插入函数
void insert(Node** head, int pos, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->prev = NULL;
newNode->next = *head;
if (pos == 0) { // 插入到最前面
newNode->next->prev = newNode;
*head = newNode;
} else {
Node* current = *head;
for (int i = 1; i < pos && current != NULL; ++i) {
current = current->next;
}
if (current != NULL) { // 找到了插入位置
newNode->prev = current->prev;
newNode->next = current;
current->prev->next = newNode;
current->prev = newNode;
}
}
}
```
最后,记得在不需要链表的时候释放节点内存:
```c
void freeList(Node* node) {
while (node != NULL) {
Node* temp = node;
node = node->next;
free(temp);
}
}
// 使用时,在适当的位置调用insert函数,并在完成时可能需要freeList(h)
```
阅读全文