具有双链接列表和丢弃节点的逻辑 - C ++

时间:2013-10-31 13:32:03

标签: c++ pointers logic doubly-linked-list

我正在尝试首次创建一个双向链表并且已经相当远 - 对于赋值的参数,我需要能够向左或向右添加节点。我可以做到这一点,直到我需要添加两个以上的节点 - 然后它取消链接我的临时节点并将其替换为我放入的任何节点。

例如:

列表> 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的位置无法更改。

0 个答案:

没有答案