遍历链表

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 个节点的链表,要走几步?

登录 后可看答案

遍历链表 · 考级冲刺 · op599 课程