面试题总结-数据结构与算法

排序

冒泡排序-比较交换

快速排序-划分-比较交换-递归

选择排序-选择-比较交换

查找

二分查找

二叉树

二叉树的前序、中序、后序遍历(递归实现)

二叉树的前序、中序、后序遍历(非递归实现)

判断一棵树是否为二叉平衡树

链表

链表的翻转

判断链表是否有环?若有环,则求该环的长度?并求其连接点?

  • 链表是否有环
一个快指针(走2步),一个慢指针(走1步),都从头开始:
	若有环则它们相撞(设碰撞点为x);
	若无环则快指针遇到空则跳出循环;
  • 求链表环的长度
从碰撞点x开始,又走(一个走一步,一个走两步),当再次碰撞时,它们走的次数为环的长度
  • 求连接点
记住结论:碰撞点到连接点的距离等于头结点到连接点的距离。两个指针(都一次一步),一个从头走,一个从碰撞点走,第一次碰撞的节点就是连接点

如何快速查找链表的中间节点?(只遍历一次)

建立两个指针,一个指针一次遍历一个节点,一个指针一次遍历两个节点,当快指针遍历到空节点时,慢指针指向的位置即为链表的中间位置

两个栈实现队列

猜你喜欢

转载自my.oschina.net/u/3706930/blog/2985863