摘自李煜东《算法竞赛进阶指南》
//链表模板1
struct Node{
int value;//数据
Node *prev,*next;//指针
};
Node *head,*tail;
void initialize()//建新链表
{
head=new Node();
tail=new Node();
head->next=tail;
tail->prev=head;
}
void insert(Node *p,int val)//在p后插入包含数据val的新节点
{
q=new Node();
q->value=val;
p->next->prev=q;
q->next=p->next;
p->next=q;q->prev=p;
}
void remove(Node *p)//删除p
{
p->prev->next=p->next;
p->next->prev=p->prev;
delete p;
}
void recycle()//链表内存回收
{
while(head!=tail)
{
head=head->next;
delete head->prev;
}
delete tail;
}
//链表模板2
struct Node{
int value;
int prev,next;
}node[SIZE];
int head,tail,tot;
int initialize()//建新链表
{
tot=2;
head=1,tail=2;
node[head].next=tail;
node[tail].prev=head;
}
int insert(int p,iny val)//在p后插入包含数据val的新节点
{
q=++tot;
node[q].value=val;
node[node[p].next].prev=q;
node[q].next=node[p].next;
node[p].next=q;
node[q].prev=p;
}
void remove(int p)//删除p
{
node[node[p].prev].next=node[p].next;
node[node[p].next].prev=node[p].prev;
}
void clear()//数组模拟链表清空
{
memset(node,0,sizeof(node));
head=tail=tot=0;
}