我应该添加什么以迭代循环以显示为“ 1-> 2-> 3->”?

时间:2019-12-13 05:44:49

标签: c++ data-structures linked-list

我正在尝试打印数据类型为struct节点的链表(“不是传统方式,即struct node *)。要到达下一个节点,我应该在while循环中添加什么?

#include<iostream>
#include<stdlib.h>
using namespace std;
struct node
{
    int data;
    struct node *next;
};
int main()
{
    struct node first;
    struct node second;
    struct node third;
    first.data = 1;
    first.next = &second;
    second.data = 2;
    second.next = &third;
    third.data = 3;
    third.next = NULL;
    struct node ptr;
    ptr = first;
    while(ptr.next!=NULL)
    {
        cout<<ptr.data<<" ";
                  //WHAT SHOULD I ADD?????
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

与其复制指针,而是通过取消引用(*(ptr.next))来指向它指向的对象。

while(1)
{
    cout<<ptr.data<<" ";

    if (ptr.next)
       ptr = *(ptr.next);
    else 
       break;
}

答案 1 :(得分:2)

在使用指针进行迭代或尝试使用类型struct node进行迭代之间,您感到困惑。您必须使用一个指针:

    struct node *ptr;
    ptr = &first;
    while(ptr != NULL)
    {
        cout<<ptr->data<<" ";
            //WHAT SHOULD I ADD?????
            ptr = ptr->next;
    }

示例输出

$ ./bin/ll_fixed_nodes
1 2 3

使用指针遍历节点

下图可以帮助您理解为什么使用指针遍历节点是有意义的。下面的每个块代表一个struct node,其中next指针保存下一个节点的地址:

    +--------+      +--------+      +--------+
    | first  |  +-->| second |  +-->| third  |
    |   data |  |   |   data |  |   |   data |
    |   next |--+   |   next |--+   |   next |-->NULL
    +--------+      +--------+      +--------+

第一个迭代,ptr指向first(持有其地址)作为其值:

ptr = &first;
...                 // 1 is output
ptr = ptr->next;    // ptr now points to second

第二次迭代:

...                 // 2 is output
ptr = ptr->next;    // ptr now points to third

第三次迭代:

...                 // 3 is output
ptr = ptr->next;    // ptr now points to NULL and loop exits