c语言 头插法 带头结点的单链表
时间: 2023-11-08 07:04:18 浏览: 80
头插法是一种在链表头部插入元素的方法,相比尾插法,头插法更加高效,因为不需要遍历整个链表。
下面是一个带头结点的单链表的头插法的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建带头结点的单链表
ListNode *createList() {
ListNode *head = (ListNode *) malloc(sizeof(ListNode)); // 创建头结点
head->next = NULL; // 头结点的 next 指针指向 NULL
return head;
}
// 在头部插入节点
void insertAtHead(ListNode *head, int val) {
ListNode *newNode = (ListNode *) malloc(sizeof(ListNode)); // 创建新节点
newNode->val = val; // 设置新节点的值
newNode->next = head->next; // 新节点的 next 指针指向原来的第一个节点
head->next = newNode; // 头结点的 next 指针指向新节点
}
// 打印链表
void printList(ListNode *head) {
ListNode *p = head->next;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
int main() {
ListNode *head = createList(); // 创建头结点
insertAtHead(head, 3); // 在头部插入节点
insertAtHead(head, 2);
insertAtHead(head, 1);
printList(head); // 打印链表
return 0;
}
```
上述代码中,`createList()` 函数用于创建带头结点的单链表,`insertAtHead()` 函数用于在头部插入节点,`printList()` 函数用于打印链表。在 `main()` 函数中,我们先创建了一个带头结点的单链表,然后在头部插入了三个节点,最后打印出链表的所有节点。
阅读全文