10年架构师图解单链表,一篇图文彻底搞懂

 §单链表的定义


每一个节点都有一个向后的指针(
引用)指向下一个节点,最后一个节点指向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进行一轮交换,逆序就完成了。如下图:

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

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信