【XDOJ2026秋数据结构】747.反转链表【Compash个人题解】
747.反转链表
问题描述
输入一个链表,反转链表后,输出链表的所有元素。
输入说明
输入第一行为整数n(n>=1),代表测试链表数。
从第二行开始每行表示一个链表,其中第一个数据表示链表中数据个数,其余数据表示要测试的链表中的数据,均为整数。
输出说明
每一行对应一个链表反转后的元素。
输入样例
//输入样例
3
5 1 2 3 4 5
3 2 4 5
1 3
输出样例
//输出样例
5 4 3 2 1
5 4 2
3
#include<iostream>
#include<vector>
struct ListNode
{
int val;
ListNode* next = NULL;
ListNode(int v) : val(v) {}
};
std::vector<ListNode*> lists;
void insertListNode(ListNode*& head, int val)
{
ListNode* newNode = new ListNode(val);
if (head == NULL)
{
head = newNode;
return;
}
ListNode* p = head;
while (p->next)
{
p = p->next;
}
p->next = newNode;
}
ListNode* reverseList(ListNode* head)
{
ListNode* prev = NULL;
ListNode* cur = head;
while (cur)
{
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
void printList(ListNode* head)
{
ListNode* p = head;
if (p == NULL) return;---
while (p)
{
std::cout << p->val << ' ';
p = p->next;
}
return;
}
int main()
{
int n;
std::cin >> n;
for (int i = 0; i < n; i++)
{
ListNode* newList = NULL;
int len;
std::cin >> len;
for (int j = 0; j < len; j++)
{
int val;
std::cin >> val;
insertListNode(newList, val);
}
lists.push_back(newList);
}
for (auto list : lists)
{
printList(reverseList(list));
std::cout << std::endl;
}
return 0;
}

浙公网安备 33010602011771号