线性表链式存储的骚操作

快慢指针的应用

快慢指针的思想是在进行链表遍历的时候,用两个指针同时指向链头,每次移动的步长不一样。最后的遍历的结果就是,快的已经走完了,慢的还在链表中间的某一个节点上。

  1. 使用场景,一次遍历,定位链表中指定位置。这里的位置是相对位置,比如中间位置,三分之二位置,或者是三分之一位置等
  2. 判断一个链表是否是回文结构,没有空间消耗的情况下可以使用该方式。可以使用快慢指针定位到中间元素以后,从中间元素到最后的元素,反向操作链表的指针。然后分别中两段开始遍历进行对比,到中间结束。还有方法二:当定位到中间节点后,可以把中间节点到尾节点中间的元素入栈,然后一个个出栈和链头开始遍历的进行对比。

单链表排序

可以用三个链表分段记录,然后进行合并思想来解决。分别定义六个指针变量。hs,he,ms,me,bs,be,分别代表前面连接的开始结束,中间链表的开始结束,后面链表的开始结束,并初始值为null。取一个数x作为比较参数,并从头开始遍历链表进行大小比较。<x就确实是在放在左边链表了,>x就确定是右边链表了,==就中间了链表。

单个链表是否为环链

  1. 普通方法可以放在集合中判断,当放入已经存在的节点的时候就是入环的节点。
  2. 快慢指针应用,慢指针一次一步,快指针一次两步,环结构必相交。

一次遍历,奇偶拆分

用两个指针,一个指向头指针,一个指向第二个元素元素指针,一个移动两步即可。

posted @   Eular  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示