Shell编程与基础算法实战–链表算法,递归[0904练习题和0905练习题]

一、0904练习题

1.链表的基本知识:

(1)线性表的链式存储结构是用一组任意的存储单元来存放线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。

(2)对每个数据元素ai,除了存储其本身的信息之外,还需存储一个指示其直接后继存放位置的指针。这两部分信息组成数据元素ai的存储映像,称为结点(node)。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存放位置的域称为指针域。

(3)如果每个结点只设置一个指向其后继结点的指针成员,这样的链表称为线性单向链接表,简称单链表。

(4)如果每个结点中设置两个指针成员,分别用以指向其前驱结点和后继结点,这样的链表称之为线性双向链接表,简称双链表。

(5)链表和数组不同和两者优缺点:
链表:                           数组:
不是连续空间                连续空间
优点:增加和删除方便;优点:易于访问和连接;
缺点:查找很难;          缺点:不利于增加和                                        删除;

2.移除链表元素–LeetCode第203题

解题思路:创建虚拟头部节点以简化删除过程;遍历列表并删除值为val的节点

5166fa06fb1c4133a624dd1401f64300.png

620f3f42e5b145e9b8784b14f1b939e1.png 

a5b4980600c14fed93d1aa9073bb6759.png 

 3.设计链表–LeetCode第707题

解题思路:获取第n个节点的值;头部插入节点;尾部插入节点;第n个节点前插入节点;删除第n个节点

b5f49df574e442febb57cb3ec104e115.png

83dc329d4fc6478a8957781cc46cbc3e.png 

a76f814ab44c4d76a8f34b1569cb3d98.png 

dbc5221af6544429a5421ba5abfbee4a.png 

4.两数相加–LeetCode第2题

48a99e0e760f45d48296fe573fb42654.png

a6c3f22ad2ba4872a58f7b9d87dff0e1.png 

f6737d536b1d4fba994c7d2f1c89a282.png

 二、[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指针就指向了新的头结点。

7be6c914d4434b12aea730b0d962f3d0.png

cd3cafd58bd749a79967e285b04931f8.png 

8a3639558a0d4ec0a30be033d05b36c4.png 

 3.两两交换链表中的节点对应LeetCode第24题

e5efb2984434463794ea621469f4fece.png

a46b94ec16574fa3963debd3f84bb224.png 

91ab980aa97f400cb388725ca382b7ff.png 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值