``` q = phead = p;```C语言单链表的逆置
时间: 2024-12-11 19:13:06 浏览: 30
在C语言中,单链表的逆置(反转)是一个常见的操作。假设我们有一个单链表,其节点结构如下:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
我们可以通过以下步骤来实现单链表的逆置:
1. 初始化三个指针:`prev`(前一个节点)、`current`(当前节点)和`next`(下一个节点)。
2. 将`current`指向链表的头节点。
3. 遍历链表,每次将`current->next`指向`prev`,然后将`prev`和`current`指针向前移动。
4. 最后,将链表的头节点指向`prev`。
以下是一个完整的示例代码:
```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* reverseList(Node* head) {
Node* prev = NULL;
Node* current = head;
Node* next = NULL;
while (current != NULL) {
next = current->next; // 保存下一个节点
current->next = prev; // 反转当前节点的指针
prev = current; // 移动prev指针
current = next; // 移动current指针
}
return prev;
}
int main() {
// 创建链表 1->2->3->4->NULL
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
printf("Original List: ");
printList(head);
// 逆置链表
head = reverseList(head);
printf("Reversed List: ");
printList(head);
return 0;
}
```
在这个示例中,`reverseList`函数实现了单链表的逆置。`main`函数创建了一个示例链表并打印其逆置后的结果。
阅读全文
相关推荐


















