c++中的单向链表插入问题如何解决

#include<iostream>
using namespace std;
struct node{
	int num;
	node *next;
};
node *head1=NULL,*head2=NULL,*s,*tail,*tail1;
void create(node *&);
void show();
void del(int);
void insert(node *&,node *);
int main(){
	int n,num,s;
	node *head=NULL;
	char spot;
	bool w=1;
	while(w){
		cout<<"想进行的操作是:(1.建立传感器结点链表(以0结束)   2.遍历链表    3.删除某一结点   4.插入结点):";
		cin>>n;
		switch(n){
			case 1:create(head1);break;
			case 2:show();break;
			case 3:cout<<"输入需要删除的结点:"; cin>>num;del(num);break;
			case 4:cout<<"输入需要插入的结点:"; cin>>s;insert(head,s);break;
			default:cout<<"输入错误!"<<endl; 
		}
		cout<<"是否继续操作(1/0)";
		cin>>w;
	}
}
void create(node *&head){
	node *p,*s;
	s=new node;
	cin>>s->num;
	while(s->num!=0){
		if(head==NULL)  head=s;
		else
		   p->next=s;
		   p=s;
		   s=new node;
		   cin>>s->num;
	} 
	tail=p;
	tail1=s;
	p->next=s;
	s->next=NULL;
}
void show(){
	node *p;
	for(p=head1;p->next!=NULL;p=p->next)
	cout<<p->num<<endl;
}
void del(int a){
	node *p,*s;
	s=head1;
	for(p=head1;p->next!=NULL;p=p->next){
		if(p->num==a){
			if(p==head1){
				head1=p->next;
				delete p;
				break;
			}
			else if(p!=tail){
				s->next=p->next;
				delete p;
				break;
			}
			else{
				tail=s;
				s->next=tail1;
				delete p;
				break;
			}
		}
		s=p;
	}
}
void insert(node *head,node *s){
	node *p,*q;
	p=head;
	if(head==NULL){
		head=s;
		s->next=NULL;
		return;
	}
	else{
		while((s->num>p->num)&&(p->next!=NULL)){
			q=p;
			p=p->next;
		}
		if(s->num<=p->num){
			if(head==p){
				head=s;
				s->next=p;
			}
			else{
				q->next=s;
				s->next=p;
			}
		}
		else{
			p->next=s;
			s->next=NULL;
		}
	}
	return;
}

第十一行和二十四行一直报错

修改如下,供参考:

#include<iostream>
using namespace std;

typedef struct node{
	int num;
	node *next;
}node;

node *head1=NULL,*head2=NULL,*s,*tail,*tail1;

void create(node *&);
void show(node *);
void del(node *&,int);
void insert(node *&,int);//void insert(node *&,node *);


int main(){
	int n,num,ss;
	//node *head=NULL;
	char spot;
	int  w=1;//bool w=1;
	while(w){
		cout<<"想进行的操作是:(1.建立传感器结点链表(以0结束)   2.遍历链表    3.删除某一结点   4.插入结点):";
		cin>>n;
		switch(n){
			case 1:create(head1);break;
			case 2:show  (head1);break;
			case 3:cout<<"输入需要删除的结点:"; cin>>num;del  (head1,num);break;
			case 4:cout<<"输入需要插入的结点:"; cin>>ss;insert(head1,ss);break;
                        //case 4:cout<<"输入需要插入的结点:"; cin>>s;insert(head,s);break;
			default:cout<<"输入错误!"<<endl;
		}
		cout<<"是否继续操作(1/0)";
		cin>>w;
	}
}

void create(node *&head){
	node *p,*s;
	//s=new node;
	//cin>>s->num;
	while(1){//while(s->num!=0){
                s=new node;
                cin>>s->num;
                if(s->num==0) break;
		if(head==NULL)  head=s;
		else
		   p->next=s;
	        p=s;
	}
        delete s;
        p->next=NULL;
	//tail=p;
	//tail1=s;
	//p->next=s;
	//s->next=NULL;
}

void show(node *head){
	node *p;
	for(p=head;p!=NULL;p=p->next)
	cout<<p->num<<endl;
}

void del(node *&head,int a){
	node *p,*s;
	//s=head;
	for(p=head,s=NULL;p!=NULL;s=p,p=p->next){
		if(p->num==a){
			if(p==head){
				head=p->next;
				delete p;
				break;
			}
			else{
				s->next=p->next;
				delete p;
				break;
			}
			//else{
			//	tail=s;
			//	s->next=tail1;
			//	delete p;
			//	break;
			//}
		}
		//s=p;
	}
}

void insert(node *&head,int ss){
	node *p,*q,*s;
        s = new node;
        s->num=ss;
	p=head;
	if(head==NULL){
		head=s;
		s->next=NULL;
		return;
	}
	else{
		while((s->num>p->num)&&(p->next!=NULL)){
			q=p;
			p=p->next;
		}
		if(s->num<=p->num){
			if(head==p){
				head=s;
				s->next=p;
			}
			else{
				q->next=s;
				s->next=p;
			}
		}
		else{
			p->next=s;
			s->next=NULL;
		}
	}
	return;
}