我正在尝试打印数据类型为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;
}
答案 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