c语言创建不带头结点的链表 新产生的结点总是位于链表头部
时间: 2024-06-17 13:01:16 浏览: 12
在C语言中,创建一个不带头结点的链表并且新节点始终位于链表头部,通常涉及到以下几个步骤:
1. 定义链表节点结构体(Node),它可能包含一个数据域和两个指针,一个用于指向下一个节点(next)和一个用于指向前一个节点(prev,在这种情况下是空的):
```c
typedef struct Node {
void* data; // 数据域
struct Node* next; // 指向下一个节点的指针
struct Node* prev; // 指向前一个节点的指针(链表不带头结点,所以prev始终为NULL)
} Node;
```
2. 创建新节点函数,用于分配内存并初始化新节点:
```c
Node* createNode(void* data) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 分配内存
if (newNode) {
newNode->data = data;
newNode->next = NULL; // 新节点没有下一个节点,prev也始终为NULL
newNode->prev = NULL;
}
return newNode;
}
```
3. 将新节点添加到链表头部的函数,这里假设有一个全局链表指针(链表为空或只有一个节点):
```c
void addToHead(Node** head, void* data) {
if (*head == NULL) {
*head = createNode(data);
} else {
Node* newNode = createNode(data);
newNode->next = *head;
(*head)->prev = newNode;
*head = newNode;
}
}
```
4. 使用这个函数时,每次需要添加新节点都要调用`addToHead(&head, data)`。