C++双向链表问题。。

2025-03-02 01:33:03
推荐回答(3个)
回答1:

第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;i   p=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;
}

回答2:

楼主的代码有点乱,我改一下你的insertdou函数:
int InsertDou(linklist &l){ //带头结点的双向链表插入元素
cout<<"请输入要插入整数的位置和大小"<int n,e;
cin>>n>>e;
linklist p = l, q;//n为0,插入第一个节点后面。。。
while(n-- > 0)
{
p = p->next;
if (p == l)
{
cout<<"输入的位置超过双向链表长度"<return -1;
}
}
q=(linklist)malloc(sizeof(node));
q->next=p->next;
q->prior=p;
p->next=q;
q->data = e;

return 0;
}

PS:楼主在主函数中尽量释放内存吧,养成好习惯

回答3:

return OK 是什么意思?
"OK"没进行定义吧