4. 写程序将一个单链表翻转。 例如:1->2->3->4->5 翻转后为:5->4->3->2->1.
时间: 2024-05-13 16:21:12 浏览: 85
C#-Leetcode编程题解之第25题K个一组翻转链表.zip
好的,这个问题可以回答。以下是一个翻转单链表的程序示例(使用C语言实现):
```c
#include <stdio.h>
#include <stdlib.h>
//定义单链表结点
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
//创建单链表
ListNode* createList() {
ListNode *head = NULL;
ListNode *tail = NULL;
int data;
printf("请输入单链表结点的值(输入0结束):\n");
scanf("%d", &data);
while (data != 0) {
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = data;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
scanf("%d", &data);
}
return head;
}
//翻转单链表
ListNode* reverseList(ListNode *head) {
ListNode *prev = NULL;
ListNode *curr = head;
while (curr) {
ListNode *next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
//遍历单链表
void traverseList(ListNode *head) {
printf("单链表翻转后的结果为:");
while (head) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
ListNode *head = createList();
head = reverseList(head);
traverseList(head);
return 0;
}
```
输入示例:
```
请输入单链表结点的值(输入0结束):
1
2
3
4
5
0
```
输出示例:
```
单链表翻转后的结果为:5 4 3 2 1
```
阅读全文