-
程序比较长,明天早上我会发到你们的邮箱,请大家注意查收。
-
编写链表算法的基础是熟悉几种常见的链表结构,然后注意以下编写链表的技巧,再加上大量的练习,就可以非常快速且高质量地编写链表。 提示如下:
1.充分理解指针或引号的含义
将变量赋值给指针,其实就是将变量的地址赋给指针,反之,指针存储变量的内存地址,指向变量,就可以通过指针找到变量。
以单链表插入为例,当我们插入一个新节点时,必须首先将新插入的节点与插入位置后面的节点连接起来,然后再将新插入的节点与上一个节点连接起来。 同理,删除也是要注意这个问题,先把删除的节点后面的节点连接起来。
3. 使用虚拟节点,简化实现难度
对于链表的插入和删除,需要对第一个节点的插入和最后一个节点的删除进行特殊处理,因此需要一个虚拟节点来解决这个问题。
虚拟节点是不参与业务逻辑,不存储业务数据的节点,一般作为链表的头节点,任何时候,无论链表是否为空,头指针都会指向这个虚拟头节点。
4、注意边界条件的处理
在写**的时候,要注意边界条件的问题,可能会造成bug,检查链表的边界条件如下:
1)如果链表是空的,**能正常工作吗?
2)如果链表只包含一个节点,**会正常工作吗?
3)如果链表只包含两个节点,**会正常工作吗?
4) 在处理头节点和尾节点时,逻辑是否正常工作?
写完后除了考虑在正常情况下是否能正常工作外,还需要考虑在以上4种情况下是否能正常工作。
5.画插图来帮助你思考
对于链表的操作,指针的操作很厚,总会让人感到很头晕目眩,所以我们可以用实例和绘图方法把问题具体化,画在纸上,然后怎么操作,这样就很清楚了。
6.多写多练习,没有捷径可走
一个问题的练习水平是多少,也就是说,当你提到这个问题时,你可以想出最关键的部分,仅此而已。
以上都是!
5,6,7,8,9,0,1,2,3,4。只要仔细看一下这个函数,它只不过是一个交换函数,先是 0-3 交换,然后是 4-9,最后是 0-9,。