C++怎么实现链表重排序


这篇文章主要介绍了C++怎么实现链表重排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++怎么实现链表重排序文章都会有所收获,下面我们一起来看看吧。Given a singly linked listL:L0→L1→…→Ln-1→Ln,
reorder it to:L0→LnL1→Ln-1→L2→Ln-2→…You maynotmodify the values in the list”s nodes, only nodes itself may be changed.Example 1:Given 1->2->3->4, reorder it to 1->4->2->3.Example 2:Given 1->2->3->4->5, reorder it to 1->5->2->4->3.这道链表重排序问题可以拆分为以下三个小问题:1. 使用快慢指针来找到链表的中点,并将链表从中点处断开,形成两个独立的链表。2. 将第二个链翻转。3. 将第二个链表的元素间隔地插入第一个链表中。解法一:我们尝试着看能否写法上简洁一些,上面的第二步是将后半段链表翻转,那么我们其实可以借助栈的后进先出的特性来做,如果我们按顺序将所有的结点压入栈,那么出栈的时候就可以倒序了,实际上就相当于翻转了链表。由于只需将后半段链表翻转,那么我们就要控制出栈结点的个数,还好栈可以直接得到结点的个数,我们减1除以2,就是要出栈结点的个数了。然后我们要做的就是将每次出栈的结点隔一个插入到正确的位置,从而满足题目中要求的顺序,链表插入结点的操作就比较常见了,这里就不多解释了,最后记得断开栈顶元素后面的结点,比如对于 1->2->3->4,栈顶只需出一个结点4,然后加入原链表之后为 1->4->2->3->(4),因为在原链表中结点3之后是连着结点4的,虽然我们将结点4取出插入到结点1和2之间,但是结点3后面的指针还是连着结点4的,所以我们要断开这个连接,这样才不会出现环,由于此时结点3在栈顶,所以我们直接断开栈顶结点即可,参见代码如下:解法二:关于“C++怎么实现链表重 香港云主机排序”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++怎么实现链表重排序”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注开发云行业资讯频道。

相关推荐: 电脑无法通过键盘输入文字如何解决

今天小编给大家分享一下电脑无法通过键盘输入文字如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方法/步骤:1.打开计算机管理界面,选择设备…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/14 17:18
下一篇 07/14 17:18

相关推荐