构造有序的单链表

描述
构造有序(升序)的单链表并实现单链表的逆置(可以采用结构化的程序设计方法实现,即不必定义类)

输入
输入链表中的数据。(用0表示输入的结束,0不能添加到链表中)
输出
按顺序输出有序链表中的数据
样例输入
4 1 6 8 2 0
样例输出
1 2 4 6 8
8 6 4 2 1

解题思想:
单链表的生成,做的时候有点偷懒了,本来应该生成单链表的时候就应该完成为升序的插入(也就是先插入一个数,然后后面的小的就插前面,大的就往后面插;结果我只是先将数据排序,然后再顺序插;)。
实质:单链表的构成,及基本操作。

#include <iostream>
#include <algorithm>
#define max 1000
using namespace std;
struct node
{
    int data;
    node *next;
};
class list
{
    node *first;
public:
    list();
    list(int a[],int n,int f);
    ~list();
    void printlist();
};
list::list()
{
    first=new node;
    first->next=nullptr;
}
list::list(int a[],int n,int f)
{
    if(f==1){
    first=new node;
    first->next=nullptr;
    for(int i=0;i<n;i++)
        {
            node *s=nullptr;
            s=new node;
            s->data=a[i];
            s->next=first->next;
            first->next=s;
        }
        }
    else{
        first=new node;
        node *r=first,*s=nullptr;
        for(int i=0;i<n;i++)
            {
                s=new node;
                s->data=a[i];
                r->next=s;
                r=s;
            }
        r->next=nullptr;
    }
}
list::~list()
{
    node *p=first;
    while(first->next!=nullptr){
        first=first->next;
        delete p;
        p=first;
    }
}
void list::printlist()
{
    node *p=first->next;
    while(p!=nullptr)
        {
            cout<<p->data<<" ";
            p=p->next;
        }
    cout<<endl;
}
int main()
{
    int b,count=0;
    int s1[max];
    while(cin>>b&&b!=0)
        {
            s1[count]=b;
            count++;
        }
    sort(s1,s1+count);
    list two{s1,count,0};
    two.printlist();
    two.~list();
    list one{s1,count,1};
    one.printlist();
    one.~list();
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值