#include<bits/stdc++.h>
using namespace std;
struct node
{int num;//记录这个结点对应猴子的编号
node *next,*pre;//next指向结点的后继,pre指向结点的前驱
}*head,*tail,*p;//head表示头指针,tail表示尾指针
int n,k;
int main()
{
cin>>n;
head=new node;
head->pre=head->next=NULL;
tail=head;//新建一个虚拟头结点(不存储元素的值)方便删除操作(不会越界),此时头尾指针都指向它
for(int i=1;i<=n;i++)
{
p=new node;
scanf("%d",&p->num);//输入第n个元素的值,存储到新建结点中
p->pre=tail;
tail->next=p;//将p指向的结点插入到tail指向的结点后面
p->next=NULL;
tail=p;//将tail更新为p,下次就插入到它的后面
}
p=new node;
p->pre=tail;
p->next=NULL;
tail->next=p;
tail=p;//和虚拟头结点类似,建立虚拟尾节点,方便删除,查询,输出
cin>>k;
p=head->next;//p开始指向虚拟头结点的后继,即第一个元素
while(p!=tail)//遍历到虚拟尾节点时停止
{if(p->num==k)//如果找到与k相同的元素,删除对应结点
{p->next->pre=p->pre;
p->pre->next=p->next;
}
p=p->next;
}
p=head->next;//p指向虚拟头结点的后继,即第一个元素
while(p!=tail)
{
printf("%d ",p->num);
p=p->next;
}
return 0;
}
删除数组中的元素(链表)
于 2018-02-12 02:41:26 首次发布