§单链表的定义
每一个节点都有一个向后的指针(引用)指向下一个节点,最后一个节点指向NULL表示结束,有一个Head(头)指针指向第一个节点表示开始。如下图:

§单链表的特点
耗子戴眼镜,鼠目寸光
我们只能拿到头节点,(在不逐个遍历的情况下),后面还有多少个节点,它们是什么,它们在哪里,谁是最后一个节点?这些我们统统都无法知道。
肉包子打狗,有去无回
遍历时只能从前往后,是单向的,一旦错过某个节点,只能从头再遍历一次,确保这次不要错过。
§节点的增/删/交换
增加节点
此时必须有两个指针,一个指向插入位置前的那个节点,称它为prev指针,一个指向待插入的节点,称它为node指针。如下图:

插入过程相等于链接的断开与重建。如下图:

用代码表示:
node.next = prev.next
prev.next = node
删除节点
此时最好有两个指针,一个指向待删除节点前的那个节点,称它为prev指针,一个指向待删除节点,称它为node指针。如下图:

用代码表示:
node = prev.next
prev.next = node.next
node.next = NULL
交换节点
此时必须有两个指针,一个指向待交换的两个节点前的那个节点,称它为prev指针,一个指向待交换的两个节点中的第一个节点,称它为first指针。如下图:

用代码表示:
first = prev.next
prev.next = first.next
first.next = prev.next.next
prev.next.next = first
§逆序
将链表的顺序倒过来。有两种方法:依次交换法,集体向后转法。
依次交换法
1先和2交换,再和3交换,再和4交换,再和5交换,现在1已经在最后了,2是第一个。如下图:

2先和3交换,再和4交换,再和5交换,此时2已经是倒数第二个了,3是第一个。如下图:

依次类推,用3进行一轮交换,再用4进行一轮交换,逆序就完成了。如下图:

感觉和冒泡排序法有些神似。
