单链表分段逆转标准做法c语言
时间: 2024-12-08 11:09:53 浏览: 17
单链表分段逆转是指将一个单链表按照一定的分段标准进行逆转,使得每个分段内的节点顺序被逆转,而整个链表仍然保持连接。以下是一个标准的单链表分段逆转的C语言实现方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
// 单链表分段逆转
Node* reverseSegments(Node* head, int k) {
if (head == NULL || k == 1)
return head;
Node* current = head;
Node* next = NULL;
Node* prev = NULL;
int count = 0;
// 逆转当前分段
while (current != NULL && count < k) {
next = current->next;
current->next = prev;
prev = current;
current = next;
count++;
}
// 递归逆转剩余链表
if (next != NULL)
head->next = reverseSegments(next, k);
// prev现在是新的头节点
return prev;
}
int main() {
// 创建链表 1->2->3->4->5->6->7->8->NULL
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5);
head->next->next->next->next->next = createNode(6);
head->next->next->next->next->next->next = createNode(7);
head->next->next->next->next->next->next->next = createNode(8);
printf("原始链表: ");
printList(head);
int k = 3;
head = reverseSegments(head, k);
printf("分段逆转后的链表 (k=%d): ", k);
printList(head);
return 0;
}
```
在这个实现中,`reverseSegments`函数用于将单链表按照每`k`个节点进行逆转。`main`函数创建了一个示例链表,并调用`reverseSegments`函数进行分段逆转,最后打印出逆转后的链表。
阅读全文