不带头节点的单链表
<一> 实现外部接口
- 实现简单增删查
- 链表逆序打印
- 实现约瑟夫环
<二>需注意点
- 插入时,要判断插入的点是否为头节点(这就确定头节点是否要改变)
删除时,要考虑单链表是否为空;是否删除的是头节点(交换法需:多考虑是否删除的是尾节点)
针对指定位置删除元素有两种方法:
<1>一般方法使用一个prev指针保存上一个节点。
<2>交换法不需要保存上一个节点,只需将下一个节点值赋值给当前节点,然后再删除下一个节点即可删除节点)指定值的所有元素都删除(思路如下图)
- 实现单链表的逆序打印时,主要有三种方法:
<1>创建另一条新的链表,将需要逆序打印的链表从头到尾遍历,且依次以头插方式插入到新链表中,最后打印新链表即可。
<2>利用栈,先将链表中元素从头至尾进行压栈,再访问栈顶元素。最后出栈顶元素直至栈为空栈。
<3>利用递归,模拟入栈出栈过程。(但须注意:若链表太长,递归调用太深,可能会导致函数调用栈溢出)