C语言单链表反转具体是怎么看的
在C语言中,可以使用结构体和指针来实现单链表的反转。
首先,我们需要定义一个结构体来表示链表的节点,其中包含两个成员,一个是存储数据的变量,另一个是指向下一个节点的指针。
typedef struct Node {
int data;
struct Node* next;
} Node;
接下来,我们可以编写一个函数来创建链表并返回链表的头节点。
Node* createLinkedList(int* arr, int size) {
Node* head = NULL;
Node* tail = NULL;
for (int i = 0; i < size; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
然后,我们可以编写一个函数来反转链表。
Node* reverseLinkedList(Node* head) {
Node* prev = NULL;
Node* curr = head;
while (curr != NULL) {
Node* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
最后,我们可以编写一个函数来打印链表的元素。
void printLinkedList(Node* head) {
Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
下面是一个完整的例子:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* createLinkedList(int* arr, int size) {
Node* head = NULL;
Node* tail = NULL;
for (int i = 0; i < size; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
Node* reverseLinkedList(Node* head) {
Node* prev = NULL;
Node* curr = head;
while (curr != NULL) {
Node* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
void printLinkedList(Node* head) {
Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
Node* head = createLinkedList(arr, size);
printf("Original Linked List: ");
printLinkedList(head);
Node* newHead = reverseLinkedList(head);
printf("Reversed Linked List: ");
printLinkedList(newHead);
return 0;
}
输出结果为:
Original Linked List: 1 2 3 4 5
Reversed Linked List: 5 4 3 2 1
这样就完成了单链表的反转
原文地址: http://www.cveoy.top/t/topic/iTwO 著作权归作者所有。请勿转载和采集!