用c++写一个反转链表的程序
时间: 2023-05-28 15:03:10 浏览: 126
以下是一个反转链表的C程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* reverseList(ListNode* head) {
ListNode *prev = NULL, *curr = head, *next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
void printList(ListNode* head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->val = 1;
head->next = (ListNode*)malloc(sizeof(ListNode));
head->next->val = 2;
head->next->next = (ListNode*)malloc(sizeof(ListNode));
head->next->next->val = 3;
head->next->next->next = NULL;
printf("Original list: ");
printList(head);
head = reverseList(head);
printf("Reversed list: ");
printList(head);
return 0;
}
```
在这个程序中,我们定义了一个链表节点结构体`ListNode`,并定义了一个函数`reverseList`,它接受一个链表头结点指针作为参数,并返回反转后的链表头结点指针。我们还定义了一个函数`printList`,它接受一个链表头结点指针作为参数,并打印出链表中所有节点的值。
在`reverseList`函数中,我们定义了三个指针变量`prev`、`curr`和`next`,用来保存当前节点、前一个节点和后一个节点。我们使用一个while循环遍历整个链表,每次将当前节点的下一个节点保存到`next`指针中,然后将当前节点的`next`指向前一个节点,最后将`prev`指针指向当前节点,`curr`指针指向`next`节点。当遍历完成后,`prev`指向的就是反转后的链表头结点,我们将它返回即可。
在`main`函数中,我们创建了一个包含三个节点的链表,并打印出原始链表和反转后的链表。
阅读全文