我第一次尝试制作双向链表并且已经走得很远 - 对于分配的参数,我需要能够在左侧或右侧添加节点。我可以做到这一点,直到我需要以任何一种方式添加两个以上的节点 - 然后它会取消我的临时节点的链接并用我放入的任何内容替换它。
前任:
列表> 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 的位置。