建立一个升序链表并遍历输出。
输入描述:
输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。
输出描述:
可能有多组测试数据,对于每组数据,
将n个整数建立升序链表,之后遍历链表并输出。
对于链表,应先初始化建立头结点,再在p不为空的时候找出插入的位置,将其插入,本题采用尾插法;
代码:
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct link{
int data;
link *next;
}link;
link *init(){//初始化,不要写成init(link *l)
link *l;
l=(link*)malloc(sizeof(link));//一定要先建立节点
l->next=NULL;
return l;
}
link *create(link *l,int x){
link *p=l->next;
link *prep=l;
while(p){//试过if(p),发现不行,还是踏踏实实的用while---if 的结构吧
if(p->data>x){
break;
}
else{
prep=p;
p=p->next;
}
}
link *s=(link*)malloc(sizeof(link));
s->data=x;
s->next=p;
prep->next=s;
return l;
}
void print(link *l){
link *p=l->next;
while(p){
cout<<p->data<<" ";
p=p->next;----->为什么我总是忘了这句!!!
}
}
int main()
{
int n,x;
link *l;
while(cin>>n){
l=init();
for(int i=0;i<n;i++){
cin>>x;
l=create(l,x);
}
print(l);
}
return 0;
}