一、0904练习题
1.链表的基本知识:
(1)线性表的链式存储结构是用一组任意的存储单元来存放线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。
(2)对每个数据元素ai,除了存储其本身的信息之外,还需存储一个指示其直接后继存放位置的指针。这两部分信息组成数据元素ai的存储映像,称为结点(node)。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存放位置的域称为指针域。
(3)如果每个结点只设置一个指向其后继结点的指针成员,这样的链表称为线性单向链接表,简称单链表。
(4)如果每个结点中设置两个指针成员,分别用以指向其前驱结点和后继结点,这样的链表称之为线性双向链接表,简称双链表。
(5)链表和数组不同和两者优缺点:
链表: 数组:
不是连续空间 连续空间
优点:增加和删除方便;优点:易于访问和连接;
缺点:查找很难; 缺点:不利于增加和 删除;
2.移除链表元素–LeetCode第203题
解题思路:创建虚拟头部节点以简化删除过程;遍历列表并删除值为val的节点
3.设计链表–LeetCode第707题
解题思路:获取第n个节点的值;头部插入节点;尾部插入节点;第n个节点前插入节点;删除第n个节点
4.两数相加–LeetCode第2题
二、[0905练习题]
1.递归方法的基本思路:
(1)递归:在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。若调用自身,称之为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。 如果一个递归过程或递归函数中递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。
(2).递归模型是递归算法的抽象,它反映一个递归问题的递归结构。一般情况下,一个递归模型由递归出口和递归体两部分组成。递归出口确定递归到何时结束,即指出明确的递归结束条件。递归体确定递归求解时的递推关系。
2.反转链表–LeetCode 第206题
解题思路:
(1)首先定义一个cur指针,指向头结点。
(2)再定义一个pre指针,初始化为null。
(3)开始反转了,首先要把 cur->next 节点用tmp指针保存一下,也就是保存一下这个节点。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。接下来,就是循环走如下代码逻辑了,继续移动pre和cur指针。
........
最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。 此时我们return pre指针就可以了,pre指针就指向了新的头结点。
3.两两交换链表中的节点对应LeetCode第24题