在指定位置插入和删除节点
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct _node{
int number;
struct _node *next;
}Node;
typedef struct{
Node *head;
Node *tail;
}List;
void add(List *plist)
{
int num;
bool first=true;
scanf("%d",&num);
while(num!=-1)
{
Node *p=(Node *)malloc(sizeof(Node));
p->next=NULL;
p->number=num;
if(first)
{
first=false;
plist->head->next=p;
plist->tail=p;
}
else{
plist->tail->next=p;
plist->tail=p;
}
scanf("%d",&num);
}
}
void print(List *plist)
{
Node *p;
for(p=plist->head->next;p;p=p->next)
printf("%d--",p->number);
printf("\n");
}
void clean_up(List *plist)
{
Node *p;
Node *q;
for(p=plist->head,q=NULL;p;p=q)
{
q=p->next;
free(p);
}
}
void insert(List *plist);
void delete_(List *plist);
int main()
{
List list;
list.head=(Node *)malloc(sizeof(Node));
list.tail=NULL;
printf("add untill -1:\n");
add(&list);
printf("in the outset the LIST is:\n");
print(&list);
insert(&list);
printf("now the LIST is:\n");
print(&list);
delete_(&list);
printf("now the LIST is:\n");
print(&list);
clean_up(&list);
}
void insert(List *plist)
{
int location;
int count;
printf("input the insert location untill -1\n");
scanf("%d",&location);
Node *q;
while(location!=-1)
{
Node *p=(Node *)malloc(sizeof(Node));
printf("input the number of news:\n");
scanf("%d",&p->number);
for(count=0,q=plist->head;q;q=q->next,count++)
{
if(count==location)
{
p->next=q->next;
q->next=p;
break;
}
}
printf("input the insert location:\n");
scanf("%d",&location);
}
}
void delete_(List *plist)
{
Node *p;
Node *q;
int location;
int count;
printf("input the delete location untill 0\n");
scanf("%d",&location);
while(location!=0)
{
p=plist->head->next;
q=plist->head;
for(count=1;p;count++)
{
if(count==location)
{
q->next=p->next;
free(p);
break;
}
q=q->next;
p=p->next;
}
printf("now the LIST is:\n");
print(plist);
printf("input the delete location\n");
scanf("%d",&location);
}
}