
 
1.单链表任意位置删除
 
	datetype pos;
	printf("please input pos");
	scanf("%d",&pos);
	head=delete_all(head,pos);
	Output(head);
 
Linklist delete_all(Linklist head,datetype pos)
{
	if(pos<1||pos>length(head)||head==NULL)
		return head;
	if(head->next==NULL)
	{
		free(head);
		head=NULL;
	}
	else
	{
		if(pos==1)
		{
			head=delete_head(head);
			return head;
		}
		else
		{
		Linklist p=head;
		for(int i=1;i<pos-1;i++)
		{
			p=p->next;
		}
		Linklist q=p->next;
		p->next=q->next;
		free(q);
		p=NULL;
		return head;
		}
	}
}
 
 2.单链表任意位置修改
 
	datetype pos;
	printf("please input pos");
	scanf("%d",&pos);
	printf("please input element");
	scanf("%d",&element);
	mod_all(head,pos,element);
	Output(head);
 
void mod_all(Linklist head,datetype pos,datetype element)
{
	Linklist p=head;
	if(head==NULL||pos<1||pos>length(head))
		return;
	for(int i=1;i<pos;i++)
	{
		p=p->next;
	}
	p->date=element;
}
 
 3.单链表任意位置查找
 
	datetype pos;
	printf("please input pos");
	scanf("%d",&pos);
	find_all(head,pos);
	Output(head);
 
void find_all(Linklist head,datetype pos)
{
	Linklist p=head;
	if(head==NULL||pos<1||pos>length(head))
		return;
	for(int i=1;i<pos;i++)
	{
		p=p->next;
	}
	printf("%d\n",p->date);
}
 
 4.单链表任意元素查找
 
	datetype key;
	printf("please input key");
	scanf("%d",&key);
	datetype index=find_ele(head,key);
	if(index==-1)
		printf("不存在\n");
	else{
		printf("在第%d的位置\n",index);
	}
	
 
int find_ele(Linklist head,datetype key)
{
	if(head==NULL)
		return -1;
	datetype count=0;
	Linklist p=head;
	for(int i=1;i<=length(head);i++)
	{
		count++;
		if(p->date==key)
			return count;
		p=p->next;
	}
	return -1;
}
 
 5.单链表任意元素修改
 
	datetype key;
	printf("please input key");
	scanf("%d",&key);
	printf("please input element");
	scanf("%d",&element);
	mod_ele(head,key,element);
	Output(head);
 
int mod_ele(Linklist head,datetype key,datetype element)
{
	if(head==NULL)
		return -1;
	datetype pos=find_ele(head,key);
	Linklist p=head;
	for(int i=1;i<pos;i++){
		p=p->next;
	}
	p->date=element;
}
 
6.单链表任意元素删除
 
	datetype key;
	printf("please input key");
	scanf("%d",&key);
	delete_ele(head,key);
	Output(head);
 
int delete_ele(Linklist head,datetype key)
{
	if(head==NULL)
		return -1;
	Linklist p=head;
	datetype pos=find_ele(head,key);
	for(int i=1;i<pos-1;i++)
	{
		p=p->next;
	}
	Linklist q=p->next;
	p->next=q->next;
	free(q);
	q=NULL;
	return 0;
}
 
 7.单链表逆置(面试)
 
	head=nizhi(head);
	Output(head);
 
Linklist nizhi(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist p=head->next;
	head->next=NULL;
	while(p)
	{
		Linklist t=p;
		p=p->next;
		t->next=head;
		head=t;
	}
	return head;
}
 
8.单链表查找倒数第n个节点(面试)
 
	printf("please input n:");
	scanf("%d",&n);
	back_node(head,n);
 
datetype back_node(Linklist head, datetype n)
{
	if(head==NULL||n<1||n>length(head))
		return -1;
	datetype pos=length(head)-n+1;
	find_all(head,pos);
	return 0;
}
 
9.单链表排序(面试)
 
	datetype flag;
	printf("printf input flag:(0|1)");
	scanf("%d",&flag);
	if(flag==1|flag==0){
		sort_list(head,flag);
		Output(head);
	}
	else{
		printf("input error\n");
	}
 
datetype sort_list(Linklist head,datetype flag)
{
	if(head==NULL)
		return -1;
	Linklist p=head;
	if(flag==1){
	for(int i=0;i<length(head)-1;i++){
		p=head;
		for(int j=0;j<length(head)-i-1;j++){
			if(p->date > p->next->date){
				p->date ^= p->next->date;
				p->next->date ^= p->date;
				p->date ^= p->next->date;
			}
			p=p->next;
		}
	}
	}
	else{
	for(int i=0;i<length(head)-1;i++){
		p=head;
		for(int j=0;j<length(head)-i-1;j++){
			if(p->date < p->next->date){
				p->date ^= p->next->date;
				p->next->date ^= p->date;
				p->date ^= p->next->date;
			}
			p=p->next;
		}
	}
		
	}
	return 0;
}
 
 10.单链表释放内存
  
 
 	head=free_list(head);
 
Linklist free_list(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist p=head;
	while(head)
	{
		p=head;
		head=head->next;
		free(p);
	}
	p=NULL;
	return head;
}