List类题型: Reverse Second Half Linkedlist

Reverse Second Half of Linked List

[] -> []

[1] -> [1]

[1,2] -> [1,2]

[1,2,3] -> [1,2,3]

[1,2,3,4] -> [1,2,4,3]

[1,2,3,4,5] -> [1,2,3,5,4]

这道题比较tricky,要考虑的情况比较多。

1. 如果这个list有偶数个node,那很好办,后半部分reverse就可以。

2 如果这个list有奇数个node, 比如: [1,2,3,4,5] 

可以reverse成[1,2,5,4,3] 也可以reverse成[1,2,3,5,4] 看对middle element的定义了。


还有一个问题, 如果我们要reverse second half list, 我们怎么也得从后半部分的list头开始往后处理吧。 那怎么知道头在哪里,也就是说怎么知道middle point在哪里?

还是用双指针的办法。假设一个人A每次走2步,一个人B每次走1次。 当A走到终点的时候,B就在跑道的中间位置。 【不过由于list可以奇数的两种情况,我们还需要做一个condition check】

另外一个重要注意的地方: 如果是reverse list的某个部分,你得从这个部分的头的前一个开始执行。

例如 a-->b-->c--->d--->e  如果我们想reverse成  a-->b--->c-->e--->d 那么我们得有一个人站在c,然后操纵后面两个人reverse。 这样c.next 才可以接到后面reverse list的头。如果我们直接从要reverse的list的头开始处理,也就是e开始, 那么当我们成功处理成d-->e时候,由于没有c的索引,没法把它和前半部分的list连起来。

核心:其实就是把后面的东西不断放到middle 指针的下一个位置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,354评论 0 33
  • 高级钳工应知鉴定题库(858题) ***单选题*** 1. 000003难易程度:较难知识范围:相关4 01答案:...
    开源时代阅读 11,271评论 1 9
  • 我不想回忆以前的生活,可,又不知道现在的生活有什么可说。从2014年的秋,我就感到了这个世界的匆忙。每个人都很忙,...
    L勤劳阅读 793评论 3 3
  • 上一章 第一章 我们这一群人都聚在一个毕业季后,开始都不习惯在陌生的环境学习,不习惯和在陌生的朋友相处,但时间久了...
    独眼怪阅读 1,846评论 0 0