链表有很多值得深思的技巧,例如是否需要虚拟头结点,如何遍历能保证不访问空值,等等。

1 是否需要虚拟头结点?

  • 如果链表涉及插入和删除的话,就需要增加虚拟头结点,方便插入和删除。

2 如何遍历能保证不访问空值?

  • 1 首先while循环体的判断条件首先必备的条件是链表的头结点到尾节点都不为空。
    • 例如:如果不使用虚拟头结点,则while的遍历条件为while(cur)
    • 如果使用虚拟头结点,则while遍历的条件为while(cur->next)
  • 2 如果循环体中使用了多层next,则while循环中需要增加其上一层的next的判断
    • 例如,while循环体中存在cur=cur->next->next,则while遍历的条件为while(cur && cur->next)

3 链表的插入和删除技巧?