西工大数据结构NOJ002:线性表的就地逆置

西工大数据结构NOJ002:线性表的就地逆置

一个顺序表类和一个链表类,顺序表中使用一个Reverse函数,作用是完成顺序表的逆序
而在链表中,在main函数里面输入数据的过程中,我直接使用了头插法创建链表,所以得到的链表就是逆序的
其实也可以写一个链表反转的函数,我写在里面,但没有使用,可以参考,其实和头插法的原理是一样的

#include <iostream>
using namespace std;
#define MAXSIZE 200
struct SqList{
    int elem[MAXSIZE];
    int length;
    SqList(int length){
        this->length=length;
    }//直接使用构造函数,在造对象的时候长度就可以根据输入确定了
    void PrintList(){
        for(int i=0;i<length;i++){
            cout<<elem[i]<<" ";
        }
        cout<<endl;
    }
    void Reverse(){
        // 通过双指针进行交换,就是停的换直到这两个指针相遇
        int left=0,right=length-1;
        while(left<right){
            int tmp;
            tmp=elem[left];
            elem[left]=elem[right];
            elem[right]=tmp;
            right--;
            left++;
        }
    }
};
struct LNode{
    int data;
    LNode *next;
};
struct LinkList{
    LNode *head;
    LinkList(){
        head = new LNode();
    }
    void PrintLinkList(){
        LNode *p=head;
        while(p->next){
            p=p->next;
            cout<<p->data<<" ";
        }
    }
    void Reverse(){
        LNode *p=head->next;
        head->next=nullptr;
        while(p){
            LNode *s = p;
            p=p->next;
            s->next=head->next;
            head->next=s;
        }
    }
};
int main() {
    int length;
    cin>>length;
    SqList l1(length);
    LinkList l2;
    int i;
    for(i=0;i<length;i++) {
        LNode *s = new LNode();
        cin>>l1.elem[i];
        // 通过头插法创建链表之后链表自然就是逆序
        s->next=l2.head->next;
        s->data=l1.elem[i];
        l2.head->next=s;
    }
    l1.Reverse();
    l1.PrintList();
    l2.PrintLinkList();
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值