写了那么久,删除有点可惜
#include
using namespace std;
typedef struct DoubleLink
{
int data;
struct DoubleLink *pre,*next;
}DoubleLink;
//创建一个双向链表的时候不能插入重复的元素;length为创建元素个数
DoubleLink *createDoubleLink(int length)
{
int data=0;
bool flag;
DoubleLink *head,*p,*q,*temp;
head=p=q=temp=NULL;
int i=-1;
while (++i
pre=NULL;
p->next=NULL;
p->data=data;
}else{
//每次都要去判断双向链表中的元素
temp=head;
while (temp)
{
//如果链表中的节点已经有元素与data相等那么重新输入,将生成节点的开关关闭
if (temp->data == data)
{
i--;
cout<<"数字重复的出现,重新输入:"<
next;
}
//判断有没有重复的数字,若没得创建,并插入相应的节点
if (flag)
{
q=(DoubleLink*)malloc(sizeof(DoubleLink));
if (NULL == q)
{
cout<<"分配内存空间失败!";
exit(0);
}
q->pre=p;
q->next=NULL;
q->data=data;
p->next=q;
p=q;
}
}
}
p->next=NULL;
return head;
}
//删除双链表指定元素的节点
DoubleLink *deleDoubleLink(DoubleLink *head,int e)
{
if (NULL==head)
{
return NULL;
}
DoubleLink *p=head->next;
//如果删除元素为第一个
if (head->data ==e)
{
//首先保证,万一head这个节点只有一个,p不就为NULL,NULL->pre错误!
if (p)
{
p->pre=NULL;
free(head);
return p;
}else{
//说明只有一个头结点
free(head);
return NULL;
}
}
//首先保证p不应该为NULL
while(p)
{
if (p->data ==e)
{ //如果删除元素为中间的,
if (p->next!=NULL)
{
p->pre->next=p->next;
p->next->pre=p->pre;
free(p);
return head;
}//如果删除元素为最后一个
if(p->next==NULL)
{
p->pre->next=NULL;
free(p);
return head;
}
}
p=p->next;
}
cout<<"元素不在双线链表中:"<
data<<",";
head=head->next;
}
system("pause");
return 0;
}