c语言头插法建立链表
时间: 2024-09-29 10:06:31 浏览: 35
在 C 语言中,头插法(也称为首插法)是指在链表的头部插入新节点的操作。这是通过定义一个新的节点,并将其指针设置为当前链表的头结点,然后将原来的头结点指向新的节点来完成的。以下是一个简单的步骤说明:
1. 定义结构体表示链表节点,包含数据域和指向下一个节点的指针:
```c
typedef struct ListNode {
int data; // 节点的数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
2. 创建插入函数,接收新节点的数据作为参数:
```c
ListNode* insertAtHead(int value) {
// 创建新节点
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) { // 内存分配失败处理
return NULL;
}
// 将新节点的数据和指针初始化
newNode->data = value;
newNode->next = NULL;
// 插入到链表头部
newNode->next = head; // head 是当前链表的头结点
head = newNode; // 更新头结点
return head;
}
```
在这个函数中,假设 `head` 是链表的头结点指针。
相关问题
用C语言头插法建立链表
以下是使用C语言头插法建立链表的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode* next;
};
struct ListNode* createList(int* arr, int n) {
struct ListNode* head = NULL;
for (int i = 0; i < n; i++) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = arr[i];
node->next = head;
head = node;
}
return head;
}
void printList(struct ListNode* head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
struct ListNode* head = createList(arr, n);
printList(head);
return 0;
}
```
在上面的示例代码中,我们定义了一个`struct ListNode`结构体来表示链表的节点,其中`val`表示节点的值,`next`表示下一个节点的地址。
`createList`函数用于创建一个包含n个节点的链表,它接受一个整型数组arr和数组长度n作为参数,返回链表的头指针。在函数中,我们使用头插法来逐个插入节点到链表中,最后返回头节点。
`printList`函数用于打印链表中的所有节点的值,它接受链表的头指针作为参数,使用while循环遍历链表,逐个打印节点的值。
在`main`函数中,我们定义了一个整型数组arr和数组长度n,然后调用`createList`函数创建了一个包含n个节点的链表,并将链表的头指针赋值给head变量。最后调用`printList`函数打印链表中的所有节点的值。
头插法建立链表c语言
头插法是在链表数据结构中,将新的节点插入到链表头部的操作。在C语言中,我们可以创建一个简单的链表结构体`Node`,它包含一个指向下一个节点的指针`next`,以及存储数据的数据域`data`。头插法的基本步骤如下:
1. 定义链表节点结构:
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
```
2. 创建链表的头结点(通常是空的):
```c
Node* head = NULL;
```
3. 插入新节点:
- 定义新节点,并初始化数据和指针:
```c
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value; // 要插入的数据
newNode->next = head; // 新节点的`next`指向当前头结点
```
- 将头结点更新为新节点:
```c
head = newNode;
```
4. 如果需要在特定位置插入,可以遍历找到目标位置再插入。
**示例完整代码片段**:
```c
void insertAtHead(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = head;
head = newNode;
}
```
阅读全文