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