为什么我的代码给出了一个无限循环,我已经多次检查我的代码,我不知道错误在哪里,但我的输出是无限循环中的 34,它是双向链表的代码!
所以请告诉我错误在哪里以及为什么我的循环在我的代码中显示 34 而不是 77 并且我的打印功能有问题吗?
#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
Node *prev;
};
class Linked
{
public:
Node *head;
Node *tail;
Linked()
{
head=NULL;
tail=NULL;
}
void add(int data,int position)
{
Node *n=new Node;
Node *n1=new Node;
n->data=data;
n->next=NULL;
n->prev=NULL;
if(head==NULL)
{
head=n;
tail=n;
cout<<"Linked list formed"<<endl;
}
if(position==0)
{
head->prev=n;
n->next=head;
head=n;
cout<<"Linked list created"<<endl;
}
else
{
n1=head;
int posi=position;
while(posi>1)
{
n1=n1->next;
posi--;
}
n->next=n1->next;
n->next->prev=n;
n1->next=n;
n->prev=n1;
}
}
void print()
{
Node *n=new Node;
n=head;
while(n!=NULL)
{
cout<<n->data<<endl;
n=n->next;
}
}
};
int main()
{
Linked l;
l.add(34,0);
l.add(77,0);
// l.add(44,1);
// l.add(90,2);
l.print();
return 0;
}
add (data,position) 有两个问题。
对于双向链表中的第一个节点,一旦 head 和 tail 指向同一个节点,我们就完成了。位置无所谓,当没有节点时。
所以停止在“链接列表形成”之后添加逻辑。添加 Else 并将其余所有代码移动到其中,它按预期工作。
代码应该能够断言 Head-> Prev 和 Tail-> next 为空。
此外,在添加单个新节点时,您不希望为 2x 节点分配内存。
不要为 n1 调用 new Node()。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句