美文网首页
数据结构与算法笔记day04:链表(5个常见的链表代码练习)

数据结构与算法笔记day04:链表(5个常见的链表代码练习)

作者: 楠楠喜欢泡枸杞 | 来源:发表于2019-04-15 23:05 被阅读0次

        1单链表反转

            我画了一个图:

            以这个简短的链表为例,想要将它反转,就是使1指向null,使2指向1,使3指向2。

            当我们执行第一步,使1指向null之后,想自行使2指向1的时候,会发现1和2之间断连了。为了不使它们断连,我们需要记录下1和2。

            到这里,我的思路如下:

            先将下一结点纪录下来(next),然后让当前结点指向上一结点(pre,pre初始值为null,因为原链表的头结点反转后变成了尾结点,指向null),再将当前结点纪录下来(now变成了pre),再让下一结点变为当前结点(next变成了now)。

            开写之前,不要忘记先定义一个节点类哦。

            代码如下:

          运行结果:

            很简单的代码却写了很久,太久不写代码犯了好多好多错,最后还是对着图一步一步走程序改好的,中间now,next,pre的转换很容易乱的,一定要注意,对着图是个很好的办法。

        2链表中环的检测

            这题我自己没有思路,所以就在网上查了一下,在常见链表操作-链表中环的检测(JAVA实现)这篇博文中,提供了两种思路:

          解决思路1:快慢指针法

            这是最常见的方法。思路就是有两个指针P1和P2,同时从头结点开始往下遍历链表中的所有节点。

            P1是慢指针,一次遍历一个节点。

            P2是快指针,一次遍历两个节点。

            如果链表中没有环,P2和P1会先后遍历完所有的节点。

            如果链表中有环,P2和P1则会先后进入环中,一直循环,并一定会在在某一次遍历中相遇。

            因此,只要发现P2和P1相遇了,就可以判定链表中存在环。

           
            解决思路2:足迹法

            顺序遍历链表中所有的节点,并将所有遍历过的节点信息保存下来。如果某个节点的信息出现了两次,则存在环。

            我选择用第一种思路来解决。

            代码如下:

            运行结果:

          设置一个为环的链表:

            再次检测的结果:

            (因为是环所以这次就不打印链表啦,否则会陷入死循环~)

            问题:

            检测环函数中注释里的问题,为什么快指针和慢指针这样设置会报错:NullPointerException

        3两个有序的链表合并

            思路:

            假设为从小到大排列的顺序,那么将这两个链表的头结点进行对比,小的那个作为新合并链表的头结点,并向后移动当前指针,然后继续对比两个链表当前指针位置的数字大小,直到其中一个链表遍历完成,另一个链表中剩下的结点按原顺序直接插入到新合并链表的尾部。

            代码:

            运行结果:

    ()

        4删除链表倒数第 n 个结点

            思路:

            设置两个指针n1和n2,刚开始都指向头结点,先让n1走n-1步,然后n1和n2再同时遍历,当n1到达尾部时,n2所指的结点就是要删除的结点。

          代码:

            运行结果:

        5求链表的中间结点

            思路:

            设置两个指针,快指针fast和慢指针slow,fast每次走两步,slow每次走一步,fast走完的时候,slow就到达中间结点了。   

            代码:

            运行结果:   

            啊~好开心,虽然前两个因为好久没编程出了很多小错误,但是后面越来越顺,写的越来越快错误越来越少,虽然都是简单的小程序,可是好有成就感呀!又重新感受到了之前编程的快乐,我爱编程!(*^__^*) 嘻嘻

            完整代码见我的github:5个常见的链表代码练习小楠楠版代码

    相关文章

      网友评论

          本文标题:数据结构与算法笔记day04:链表(5个常见的链表代码练习)

          本文链接:https://www.haomeiwen.com/subject/qrvmiqtx.html