c语言单向链表的创建
时间: 2024-09-25 17:19:14 浏览: 48
在C语言中,单向链表是一种线性数据结构,它由一系列节点组成,每个节点包含两个部分:数据域(存储实际数据)和指针域(指向下一个节点)。以下是创建单向链表的基本步骤:
1. 定义节点结构体(Node):这是链表的基础单元,包含数据和指向下一个节点的指针。
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域
} Node;
```
2. 创建链表头结点(Head):通常链表的第一个节点称为头结点,它用于表示链表的开始,但并不存储实际数据,其next指向第二个节点。
```c
Node* head = NULL; // 初始化为空
```
3. 插入节点:可以创建新节点并将其添加到链表末尾或指定位置。
- 添加新节点:`Node* newNode = (Node*)malloc(sizeof(Node));`
- 设置数据:`newNode->data = value;`
- 设置指针:如果头结点为空,则`head = newNode;`;否则找到最后一个节点并设置它的`next`指向新节点。
4. 遍历链表:通过头结点的`next`指针逐个访问链表中的节点。
5. 删除节点:根据需要删除特定位置的节点,可能涉及更新前一个节点的`next`指针。
相关问题
c语言单向链表的创建与输出
在C语言中,单向链表是一种线性数据结构,每个节点包含两个部分:数据域用于存储数据,指针域用于指向下一个节点。下面是创建一个简单的单向链表并输出其内容的基本步骤:
1. **创建链表节点**:
- 定义一个`struct Node`,包含数据`data`和指向下一个节点的指针`next`。
```c
struct Node {
int data;
struct Node* next;
};
```
2. **创建链表头节点**:
- 初始化一个空链表,通常创建一个头节点,它本身没有数据,只有`next`为NULL。
```c
struct Node* head = NULL;
```
3. **插入节点**:
- 要添加新节点,需要一个函数如`insertNode()`,接受数据值和头节点作为参数。
```c
void insertNode(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = head;
head = newNode;
}
```
4. **遍历链表**:
- 创建一个辅助函数,如`displayList()`,通过递归或循环遍历整个链表并打印节点值。
```c
void displayList(struct Node* node) {
if (node != NULL) {
printf("%d -> ", node->data);
displayList(node->next);
}
}
// 调用展示整个链表
displayList(head);
```
5. **示例完整代码**:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 插入节点到链表
void insertNode(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = head;
head = newNode;
}
// 显示链表
void displayList(struct Node* node) {
if (node != NULL) {
printf("%d -> ", node->data);
displayList(node->next);
} else {
printf("null");
}
}
int main() {
struct Node* head = NULL; // 空链表
// 添加节点
insertNode(1);
insertNode(2);
insertNode(3);
// 输出链表
printf("链表内容: ");
displayList(head);
return 0;
}
```
c语言单向链表倒叙
单向链表倒序可以通过遍历链表,将每个节点的指针指向前一个节点来实现。具体步骤如下:
1. 定义三个指针 pre、cur 和 next,分别指向前一个节点、当前节点和后一个节点,初始时 pre 为 NULL,cur 指向链表的头节点。
2. 遍历链表,每次将当前节点的 next 指针指向前一个节点,然后将三个指针分别后移一个节点。
3. 当 cur 指向最后一个节点时,链表已经倒序完成,此时需要将链表的头节点指向 cur。
以下是具体的实现代码:
```c
void reverse_list(ListNode **head) {
if (!head || !(*head)) {
return;
}
ListNode *pre = NULL;
ListNode *cur = *head;
ListNode *next = NULL;
while (cur) {
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
*head = pre;
}
```
其中,head 是指向链表头节点的指针,函数通过改变链表节点的指针来实现链表的倒序。
阅读全文