我正在尝试首次创建一个双向链表并且已经相当远 - 对于赋值的参数,我需要能够向左或向右添加节点。我可以做到这一点,直到我需要添加两个以上的节点 - 然后它取消链接我的临时节点并将其替换为我放入的任何节点。
例如:
列表> addleft 5
列表>打印
5
列表> addleft 1
列表>打印
1-5
列表> addleft 4
列表>打印
1-4-5
列表> addleft 3
列表>打印
1-3-5
我不确定这是否是我在语法上遇到错误或者我需要创建一个temp2节点(尽管当我在纸上写出来之后我仍然没有正确打印它然后从头到电流)。
对我的逻辑有任何帮助吗?
void Dlist::addleft(int data){
Node *temp = new Node;
if(head==NULL){
curr = temp;
temp->data = x;
temp->next = NULL;
temp->prev = NULL;
head = curr;
}
else if(head->next==NULL){
head = temp;
temp->data = x;
temp->next = curr;
curr->prev = temp;
head->prev = NULL;
}
else{
temp->data = x;
temp->next = curr;
temp->prev = head;
head->next = temp;
curr->prev = temp;
}
}
void Dlist::addright(int data){
Node *temp = new Node;
if(last==NULL){
temp->data = x;
temp->prev = curr;
curr->next = temp;
last = temp;
last->next = NULL;
}
else{
temp->data = x;
temp->prev = curr;
temp->next = last;
last->prev = temp;
curr->next = temp;
}
}
我尝试过的一个例子不起作用:
else{
Node *temp2 = new Node;
temp2->data = x;
temp2->next = curr;
temp2->prev = temp;
temp->next = temp2;
curr->prev = temp2;
}
顺便说一句 - 我知道我需要完全改变addright功能,但我想在跳入之前让addleft正确。只是添加了它。例如。
此外,我的打印功能到目前为止效果很好。
void Dlist::print(){
Node *temp = new Node;
temp = head;
while(temp->next != NULL){
cout << temp->data << "-";
temp = temp->next;
}
cout << temp->data;
cout << endl;
}
解决方案:我能够通过创建滑动指针来解决这个问题,因为curr的位置无法更改。