0

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

前任:

列表> 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 的位置。

4

0 回答 0