10
作者:
xxdmd8
,
2024-12-19 22:04:15
,
所有人可见
,
阅读 5
LZK-2.22 单链表就地逆置
【问题描述】试写一算法,实现单链表就地逆置,即利用原表的存储空间将线性表(a1,...,an)逆置为(an,...,a1)。
【输入形式】先输入正整数个数,然后连续输入多个正整数,每数之间以一个空格隔开。
如: 5 //正整数个数
1 2 3 4 5 //连续输入5个正整数,每数之间以一个空格隔开。
【输出形式】把输入的正整数逆序输出,每数之间以一个空格隔开。 如 5 4 3 2 1
【样例输入】5
1 2 3 4 5
【样例输出】5 4 3 2 1
#include<iostream>
using namespace std;
struct ListNode{
int val;
ListNode* next;
};
typedef ListNode* LinkList;
void createList(LinkList& L,int m){
L = new ListNode;
ListNode* r = L;
int x;
for(int i = 0;i < m;i ++){
cin >> x;
ListNode* s = new ListNode;
s->val = x;
s->next = nullptr;
r->next = s;
r = s;
}
}
void printList(LinkList L){
ListNode* p = L->next;
while(p){
cout << p->val << " ";
p = p->next;
}
}
void deleteList(LinkList L){
ListNode* p = L->next;
while(p){
ListNode* s = p;
p = p->next;
delete s;
}
delete L;
}
void reverseList(LinkList& L){
if(!L || !(L->next)) return;
LinkList pre = nullptr,cur = L->next,nex = nullptr;
while(cur){
nex = cur->next;
cur->next = pre;
pre = cur;
cur = nex;
}
L->next = pre;
}
int main(){
int m;
cin >> m;
LinkList L = nullptr;
createList(L, m);
reverseList(L);
printList(L);
deleteList(L);
return 0;
}