从链表头开始,涉及整个链表,在每个结点上操作的过程称为遍历链表
假设链表的链表头指针是namelist,要遍历链表,则需要另一个指针ptr指向链表的开头。
listnode* ptr = head;
然后可以使用表达式*ptr或者结构指针操作符->处理由ptr指向的结点。
需要打印节点上的值
cout << ptr->name << endl;
一旦该节点打印完毕,那么指针将会移动到下一个节点
ptr = ptr -> next1;
以上语句使用指向结点后继的指针来替换了指向该结点的指针,实现了结点之间的移动
listnode* ptr2 = head;
while (ptr2 != nullptr)
{
cout << "第二次打印 " << endl;
cout << ptr2 -> name << endl;
ptr2 = ptr2->next1;
}
遍历链表完整代码
#include<iostream>
#include<string>
using namespace std;
struct listnode
{
string name;
listnode* next1;
listnode(string name1, listnode* next2 = nullptr)
{
name = name1;
next1 = next2;
}
};
void main()
{
listnode* second = new listnode("李四");
listnode *head = new listnode("张三",second);
listnode* ptr = head;
cout << "第一次打印 " << endl;
cout << ptr->name << endl;
//一旦该节点打印完毕,那么指针将会移动到下一个节点
ptr = ptr -> next1;
cout << ptr->name << endl;//为什么不可以用*ptr.name
listnode* ptr2 = head;
while (ptr2 != nullptr)
{
cout << "第二次打印 " << endl;
cout << ptr2 -> name << endl;
ptr2 = ptr2->next1;
}
}
执行结果