简单算法养成(一)

147 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天 点击查看活动详情

说到算法,iOSer应该是比较头疼的,没别的原因,就是oc语言太不友好了。

所以我准备写一些可以用xcode可以编辑的常考算法,尽量写下每一步的注释,以供大家参考。

文章下面有链接可供下载查看

字符串反转

这个算法题,其实要是用OC写,也可以写出来,但是不够优雅,一般来说,会用c语言来写。 具体实现逻辑就是交换第一个和最后一个指针指向的字符,直到指针指向同一个。

截屏2022-04-14 下午2.36.59.png

调用方法

截屏2022-04-14 下午2.57.30.png

最后就会输出

reverse result is dlrow,olleh

这个题应该是简单难度,主要是考察指针的使用。


链表反转

顾名思义就是将 1->2->3->4-null 变为 4->3->2->1->null

截屏2022-04-14 下午3.02.31.png

链表反转这个算法有多个方法可以解决,在这里暂时只讲解头插法

看下图

截屏2022-04-14 下午3.06.51.png

我们定义一个p指针,指向原链表的第一个元素,

截屏2022-04-14 下午3.05.05.png

然后先移动p指针到第二个元素上,在将第一个元素插入到新链表的头部,后面就以此类推。

再看代码,首先定义一个链表

截屏2022-04-14 下午3.10.15.png

再写一个构造链表的函数

截屏2022-04-14 下午3.12.19.png

这个函数主要是构造4个链表节点,就不赘述了。

然后 开始写链表反转的方法

截屏2022-04-14 下午3.13.53.png

这里面的关键点就是while循环里 如何将原链表的第一个元素插入新链表的头部。

我们可以打断点看

第一次进入时 将p的下个节点信息赋值给temp

截屏2022-04-14 下午3.16.26.png

然后将p的下个节点赋值为Null

截屏2022-04-14 下午3.18.32.png

这个操作 就相当于将原链表的第一个节点摘出来,就是下图的操作

截屏2022-04-14 下午3.20.29.png

这时操作完成后,就可以看到p的next节点已经为Null了

截屏2022-04-14 下午3.21.48.png

再将这个p,赋值给新的链表,

最后移动p的指针

截屏2022-04-14 下午3.22.55.png

这样,就完成了原链表第一个元素的插值操作,接下来就是循环了。

最后我们来看看如何使用

截屏2022-04-14 下午3.25.36.png

最后的输入结果就是

node is 1 
node is 2 
node is 3 
node is 4 
-------
node is 4 
node is 3 
node is 2 
node is 1 

好了,这两个简单的算法题在xcode上演示完成了,难度并不是很大,主要是要了解一下c语言的指针和链表有关的知识。

好了 上面两个题都放到了github里,可以不懂的话可以下载下来自己试试

用xcode写算法