首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++声明双链接列表,遍历列表使用两个for-循环和打印。

C++声明双链接列表,遍历列表使用两个for-循环和打印。
EN

Stack Overflow用户
提问于 2020-06-26 13:36:30
回答 1查看 55关注 0票数 0

从C++开始(请轻点)。我有一些代码,我必须:

  • 添加元素*以生成双链接列表
  • 向元素中添加insert_before()和insert_after()方法
  • 用两个独立的for-循环遍历列表。
  • 每个循环内的打印操作号

我尝试了以下几点:

代码语言:javascript
复制
#include <cstdio>

struct Element {
    Element* next{};
    Element* previous{};

    void insert_after(Element* new_element) {
        new_element -> previous = this;
        new_element -> next = this -> next;
        this -> next = new_element;
    }
    void insert_before(Element* new_element) {
        new_element -> previous = this -> previous;
        new_element -> next = this;
        this -> previous = new_element;
    }
    char prefix[2];
    short operating_number;
};

int main() {
    Element trooper1, trooper2, trooper3, trooper4;
    trooper1.prefix[0] = 'T';
    trooper1.prefix[1] = 'K';
    trooper1.operating_number = 421;
    trooper1.insert_after(&trooper2);
    trooper2.prefix[0] = 'F';
    trooper2.prefix[1] = 'N';
    trooper2.operating_number = 2187;
    trooper2.insert_before(&trooper3);
    trooper3.prefix[0] = 'L';
    trooper3.prefix[1] = 'S';
    trooper3.operating_number = 005;
    trooper3.insert_before(&trooper4);
    trooper4.prefix[0] = 'F';
    trooper4.prefix[1] = 'K';
    trooper4.operating_number = 2602;

    for (Element *cursor = &trooper1; cursor; cursor = cursor -> next) {
        printf("stormtrooper %c%c-%d\n",
                cursor->prefix[0],
                cursor->prefix[1],
                cursor->operating_number);
    }
    for (Element *cursor = &trooper3; cursor; cursor = cursor -> previous) {
        printf("stormtrooper %c%c-%d\n",
               cursor->prefix[0],
               cursor->prefix[1],
               cursor->operating_number);
    }
}

这是非常基本的,我知道。但我开始学了。代码编译正确,但我得到了以下输出:

代码语言:javascript
复制
/home/facundo/Escritorio/C++Projects/cmake-build-debug/C__Projects
stormtrooper TK-421
stormtrooper FN-2187
stormtrooper LS-5
stormtrooper FK-2602
stormtrooper TK-421

Process finished with exit code 0

我真的不明白为什么它只打印(我想应该有8行输出)。我原以为会有一个输出来打印这样的元素:

trooper1

trooper4

trooper3

trooper2

trooper2

trooper3

trooper4

trooper1

如果能提供一些帮助,我们将不胜感激。谢谢你慢慢来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-26 13:47:11

insert函数中,没有正确地链接所有指针:

代码语言:javascript
复制
void insert_after(Element* new_element) {
    new_element -> previous = this;
    new_element -> next = this -> next;
    this -> next = new_element;
    if (new_element -> next)  // this check needed
        // to correctly link the next -> previous
        new_element -> next -> previous = new_element; 
}

代码语言:javascript
复制
void insert_before(Element* new_element) {
    new_element -> previous = this -> previous;
    new_element -> next = this;
    this -> previous = new_element;
    if (new_element -> previous) // this check needed
        // to correctly link the previous -> next
        new_element -> previous -> next = new_element;
}

另外,在第二个for循环中,请注意trooper2是列表中的最后一个Element,而不是trooper3,因此您需要从那里开始查看所有的Element

这是一个演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62595969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档