用C语言写一段程序使一个单链表后半段元素反转
时间: 2024-09-27 22:17:24 浏览: 37
单片机C语言程序设计播放一段音乐(基于8051+Proteus仿真)
5星 · 资源好评率100%
你可以使用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;
}
阅读全文