#include <iostream>
#include <stdlib.h>
using namespace std;
//一维数组存储
int LArray[1001];
//链式存储
typedef struct node
{
int val;
struct node *next;
}*LNode;
int main()
{
//初始化
int n;
cin>>n;
LNode LLink = (LNode)malloc(sizeof(struct node));
//输入
LNode tail = LLink;
LNode x;
for(int i=0; i<n; i++) {
//一维数组存储
cin>>LArray[i];
//链表,尾插法
x = (LNode)malloc(sizeof(struct node));
x->val = LArray[i];
x->next = NULL;
tail->next = x;
tail = x;
}
//LArray,逆序只需要交换
for(int i=0; i<n/2; i++)
swap(LArray[i], LArray[n-1-i]);
//LLink,逆序需要p、q、tmp指向连续的三个节点,不断更新
LNode p = NULL;
LNode q = NULL;
LNode tmp = NULL;
p = LLink->next;
if(p) q = p->next; //保证LLink不为空
if(q) tmp = q->next; //保证LLink的节点数大于一个
p->next = NULL; //尾节点指向空
while(tmp) {
q->next = p; //第n+1个节点指向第n个
p = q;
q = tmp;
tmp = q->next;
}
q->next = p; //最后一个节点指向倒数第二个
LLink->next = q; //头节点指向最后一个节点
//输出
for(int i=0; i<n-1; i++)
cout<< LArray[i] <<' ';
cout<< LArray[n-1] <<endl;
for(tmp=LLink->next; tmp->next; tmp=tmp->next)
cout <<tmp->val <<' ';
cout<< tmp->val <<endl;
return 0;
}
【数据结构】NOJ002 线性表的就地逆置
最新推荐文章于 2023-04-05 22:36:55 发布
本文详细探讨了如何在线性表中实现就地逆置操作,通过具体步骤和实例解析这一数据结构操作,旨在帮助读者理解并掌握线性表的逆置技巧。
2856

被折叠的 条评论
为什么被折叠?



