描述
构造有序(升序)的单链表并实现单链表的逆置(可以采用结构化的程序设计方法实现,即不必定义类)
输入
输入链表中的数据。(用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;
}