用c语言写一段单链表的基本操作和存储结构
时间: 2023-03-08 12:43:14 浏览: 122
单链表是一种具有特殊存储结构的线性表,它由一组节点组成,每个节点包含两个元素:数据和指向下一个节点的指针。在c语言中,单链表的基本操作有:创建链表、插入节点、查找节点、删除节点和释放链表。以下是一个关于单链表的示例:struct node {
int data;
struct node *next;
};struct node *head = NULL; // 创建头结点struct node *createnode(int data) // 创建新节点
{
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp->data = data;
temp->next = NULL;
return temp
相关问题
请你用C语言写一段单链表的显示输出列表函数
好的,以下是用C语言写的单链表的显示输出列表函数:
```
void displayList(struct node *head) {
struct node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
```
其中,`struct node`表示单链表节点的结构体,包括`int data`表示节点存储的数据,`struct node *next`表示指向下一个节点的指针。`head`表示单链表的头节点,即第一个节点。函数中使用`current`指针遍历单链表,输出每个节点的数据,直到遍历到链表尾部为止。
用C语言写一段程序使一个单链表后半段元素反转
你可以使用C语言编写以下程序来实现单链表的后半部分反转:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 反转链表后半部分的辅助函数
Node* reverse_list(Node* head, Node* mid) {
if (mid == NULL || mid->next == NULL) { // 如果是只有一个节点或没有后半部分,直接返回
return head;
}
Node* prev = NULL; // 初始化前驱节点为NULL
Node* current = mid->next;
Node* next_temp = NULL;
while (current != NULL) {
// 存储当前节点的下一个节点
next_temp = current->next;
// 更新当前节点的下一个为后半部分的前一个
current->next = prev;
// 移动前驱和当前节点
prev = current;
current = next_temp;
}
// 合并后半部翻转后的链表与前半部
if (prev != NULL) {
prev->next = head->next;
} else {
head = head->next;
}
return head;
}
// 测试用例
void print_list(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
Node* head = create_list(); // 假设create_list()函数已经创建了一个完整的链表
Node* middle = find_middle(head); // 假设find_middle()函数找到了链表的中间节点
head = reverse_list(head, middle);
print_list(head); // 打印反转后链表的内容
return 0;
}
阅读全文