单向循环链表的有关问题

单向循环链表的问题
以下代码
我是头文件
struct node
{
int data;
node* next;
};
class list
{
private:
node* head;
public:
list();
void insert();
void dele();
void dele_all();
void show();
};
我是方法文件
#include"list.h"
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
list::list()
{
node*p=new node;
head=p;
head->next=head;
}
void list::insert()
{
node *p,*s;
int j=1;
int data_r,num;
cout<<"请输入节点的值与位置:"<<endl;
cin>>data_r>>num;
if((head->next==head)&&(num!=1))
exit(0);
else

p=head->next;
while(p!=head&&j<num)
{
p=p->next;
j++;
}

if(j==num)
{
s=new node;
s->data=data_r;
s->next=p->next;
p->next=s;
}
}

}

void list::dele()
{
node* p=head,*s;
int j=1,num;
cout<<"请输入想删除的节点的位置:"<<endl;
cin>>num;
if(head==0)
exit(0);
else
{
while(p&&j<num)
{
p=p->next;
j++;
}
if(j==num)
{
s=p->next;
p->next=p->next->next;
delete s;
}
}
}


void list::show()
{
node *p=head->next;
while(p!=head)
{
cout<<p->data<<"->";
p=p->next;
}
}
void list::dele_all()
{
node *p=head->next , *q;
while(p!=head)
{
q=p;
p=p->next;
delete q;

}
head->next=head;
}

我是执行文件
#include"list.h"
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
list p;
bool ans=true;
int choose;
while(ans==true)
{
cout<<"what do you want to do?"<<endl
<<"1.insert"<<endl
<<"2.delete"<<endl
<<"3.show"<<endl
<<"4.delete_all"<<endl;
cin>>choose;
switch(choose)
{
case 1:p.insert();break;
case 2:p.dele();break;
case 3:p.show();break;
case 4:p.dele_all();break;
default:
break;
}
cout<<"do you want to coutinue?(1/0)"<<endl;
cin>>ans;
}
}

我想问一下,为什么当我打印整个链表时,链表的输出顺序正好和我的输入顺序相反的呢?
------解决思路----------------------
楼主是顺序插入的吧,插入位置是1,2,3,4.。。。你的insert函数中寻找位置的代码
while(p&&j<num)
{
p=p->next;
j++;
}

每次都会把插入节点插入到head节点后作为head后的头一个节点。