遍历链表
约 8 分钟
遍历就是从头指针出发,处理当前节点,再顺着 next 走到下一个,直到遇见 nullptr 停下。
Node* p = head; // 从头开始
while (p != nullptr) { // 没到结尾就继续
cout << p->val << ' ';
p = p->next; // 关键:走向下一个
}
用一个临时指针 p 去走,千万别直接动 head——head 一旦被改掉,整条链的入口就丢了,再也找不回来。
遍历 5 个节点要走 5 步(访问 5 个节点,第 6 次 p 变成 nullptr 退出),复杂度 。
考试常见坑:(1)循环条件是 p != nullptr,写成 p->next != nullptr 会漏掉最后一个节点;(2)p = p->next 这句是循环的「引擎」,忘了写就死循环;(3)空链表(head == nullptr)时循环一次都不进,正好正确,不用特判;(4)别在遍历中途 delete 当前节点后又访问它的 next,要先把 next 存下来。
小纸条
遍历 5 个节点的链表,要走几步?
登录 后可看答案