删除偶数结点 2000
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LEN sizeof(struct node)
struct node
{
int data;
struct node *next;
};
int main()
{
//建立链表
struct node *p,*p1,*head;
p=head=(struct node *)malloc(LEN);
scanf("%d",&p->data);
while(p->data!=-1)
{
p1=p;
p=(struct node *)malloc(LEN);
scanf("%d",&p->data);
p1->next=p;
}
p->next=NULL;
p=head;
while(p->next!=NULL)
{
struct node *temp=p->next;
if(temp->data%2==0)
{
p->next=temp->next;
free(temp);
}
else
p=temp;
}
p=head;
if(head->data%2==0||(-head->data)%2==0)
{
head=p->next;
free(p);
p=head;
}
p=p->next;
//链表显示
p=head;
while(p->next!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
printf("%d\n",p->data);
return 0;
}
增删 1902
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
} node;
node *creat()///创建链表
{
node *s;
s=(node*)malloc(sizeof(node));
s->next=NULL;
return s;
}
void add_data(int x,int y,node *head)///在链表中的指定位置后加入数据
{
node *p=head;
node *s;
while(p->next!=NULL)
{
p=p->next;
if(p->data==x)
{
s=creat();
s->next=p->next;
p->next=s;
s->data=y;
p=s;
}
}
}
void del_data(int x,node *head)///删除链表中的指定数据
{
node *p=head;
node *s;
while(p->next!=NULL)
{
s=p;
p=p->next;
if(p->data==x)
{
s->next=p->next;
free(p);
p=s;
}
}
}
void output_data(node *head)///输出链表里的数据
{
node *p=head;
bool flag=true;
while(p->next!=NULL)
{
p=p->next;
if(flag)
{
flag=false;
}
else
{
printf(" ");
}
printf("%d",p->data);
}
printf("\n");
}
int main ()
{
int n,m;
int x,y;
int i;
int a;
char operation[10];
while(~scanf("%d%d",&n,&m))
{
node *head=creat();
node *s;
s=head;
for(i=0; i<n; i++)
{
scanf("%d",&a);
node *p;
p=creat();
p->data=a;
s->next=p;
s=p;
}
for(i=0; i<m; i++)
{
scanf("%s",&operation);
if(operation[0]=='A')
{
scanf("%d%d",&x,&y);
add_data(x,y,head);
}
else
{
scanf("%d",&x);
del_data(x,head);
}
}
output_data(head);
}
return 0;
}