一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天 点击查看活动详情。
说到算法,iOSer应该是比较头疼的,没别的原因,就是oc语言太不友好了。
所以我准备写一些可以用xcode可以编辑的常考算法,尽量写下每一步的注释,以供大家参考。
文章下面有链接可供下载查看
字符串反转
这个算法题,其实要是用OC写,也可以写出来,但是不够优雅,一般来说,会用c语言来写。 具体实现逻辑就是交换第一个和最后一个指针指向的字符,直到指针指向同一个。
调用方法
最后就会输出
reverse result is dlrow,olleh
这个题应该是简单难度,主要是考察指针的使用。
链表反转
顾名思义就是将 1->2->3->4-null 变为 4->3->2->1->null
链表反转这个算法有多个方法可以解决,在这里暂时只讲解头插法。
看下图
我们定义一个p指针,指向原链表的第一个元素,
然后先移动p指针到第二个元素上,在将第一个元素插入到新链表的头部,后面就以此类推。
再看代码,首先定义一个链表
再写一个构造链表的函数
这个函数主要是构造4个链表节点,就不赘述了。
然后 开始写链表反转的方法
这里面的关键点就是while循环里 如何将原链表的第一个元素插入新链表的头部。
我们可以打断点看
第一次进入时 将p的下个节点信息赋值给temp
然后将p的下个节点赋值为Null
这个操作 就相当于将原链表的第一个节点摘出来,就是下图的操作
这时操作完成后,就可以看到p的next节点已经为Null了
再将这个p,赋值给新的链表,
最后移动p的指针
这样,就完成了原链表第一个元素的插值操作,接下来就是循环了。
最后我们来看看如何使用
最后的输入结果就是
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里,可以不懂的话可以下载下来自己试试