【数据结构】NOJ002 线性表的就地逆置

本文详细探讨了如何在线性表中实现就地逆置操作,通过具体步骤和实例解析这一数据结构操作,旨在帮助读者理解并掌握线性表的逆置技巧。
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值