第22行,多了这句:
p=(linklist)malloc(sizeof(node));
p本来等于l的,加上上面这句会重新分配p指向的位置,可能是你的笔误吧!
另外有没有编译过得,我给你改了,是不是下面这样的:
#include
#include
using namespace std;
typedef struct node{
int data;
node *next;
node *prior;
}*linklist;
void CreDou(linklist &l){ //初始化双向链表
l=(linklist)malloc(sizeof(node));
l->next=l->prior=l;
l->data=1;
}
int InsertDou(linklist &l){ //带头结点的双向链表插入元素
int OK=0;
cout<<"请输入要插入整数的位置和大小"<int n,e;
cin>>n>>e;
if(n<=l->data){
linklist p=l;
// p=(linklist)malloc(sizeof(node));
for(int i=0;ip=p->next;
}
linklist q=(linklist)malloc(sizeof(node));
q->next=p->next;q->prior=p;
q->next->prior=q;p->next=q;
l->data++;
return OK;
}
else
cout<<"输入的位置超过双向链表长度"<}
int main(){
linklist l;
CreDou(l);
InsertDou(l);
return 0;
}
楼主的代码有点乱,我改一下你的insertdou函数:
int InsertDou(linklist &l){ //带头结点的双向链表插入元素
cout<<"请输入要插入整数的位置和大小"<
cin>>n>>e;
linklist p = l, q;//n为0,插入第一个节点后面。。。
while(n-- > 0)
{
p = p->next;
if (p == l)
{
cout<<"输入的位置超过双向链表长度"<
}
}
q=(linklist)malloc(sizeof(node));
q->next=p->next;
q->prior=p;
p->next=q;
q->data = e;
return 0;
}
PS:楼主在主函数中尽量释放内存吧,养成好习惯
return OK 是什么意思?
"OK"没进行定义吧