我正在阅读Lospinoso的“ C ++速成课程”,其中是以下代码。我不确定“ new_element-> next = next”这一行背后的原因。如果删除它,代码仍然会产生相同的结果。

当将“&trooper2”传递给insert_after方法时,trooper2的“ next”指针是否指向trooper1的“ next”指针指向的位置?当trooper2的下一个指针都已经为空指针时,为什么将它们分配给trooper1的下一个指针?

大家节日快乐,谢谢你的帮助

#include <cstdio>

struct Element {
     Element* next{};

     void insert_after(Element* new_element) {
     new_element->next = next;
     next = new_element;
   }

char prefix[2];
short operating_number;
};

int main() {
    Element trooper1, trooper2, trooper3;
    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_after(&trooper3);
    trooper3.prefix[0] = 'L';
    trooper3.prefix[1] = 'S';
    trooper3.operating_number = 005;

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

最佳答案

该代码的作用是在调用元素和它指向的元素之间插入一个元素。让我们看看发生了什么:


从trooper1开始


= trooper1> NULL


在trooper1和NULL之间添加trooper2


= trooper1> trooper2> NULL


在trooper2和NULL之间添加trooper3


= trooper1> trooper2> trooper3> NULL

您正在调用元素和下一个已经为NULL的元素之间插入一个元素。因此,您也将新元素的旁边设置为NULL。

**更新**

就像@Beta所说的那样,如果继续添加到第一个元素,则实际上会得到一个列表,其中在第二个位置插入了新元素。接下来的一个元素是实际指向某物:


从trooper1开始


= trooper1> NULL


在trooper1和NULL之间添加trooper2


= trooper1> trooper2> NULL


在trooper1和trooper2之间添加trooper3


= trooper1> trooper3> trooper2> NULL


在trooper1和trooper3之间添加trooper3


= trooper1> trooper4> trooper3> trooper2> NULL

关于c++ - 将元素插入链接列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59042591/

10-09 06:01