拿到题目, 首先要先了解链表数据结构, 如下图:

  iOS常用算法之单链表查找倒数第n个节点(图解)-LMLPHP  

  常规思路: 利用数组, 遍历整个单链表, 将每个节点装入数组中, 最终拿到数组根据索引(数组长度-1-n)就得到了倒数第n个元素, 这里要注意从数组中根据索引取值的时候要注意数组越界的情况发生.

  简单思路:

定义两个指针p1,p2;

    假设总长度为n,

    倒数第k个对应正数第n-k-1,

    那么第一个指针移动k-1次, 第二个指针保持在head不动;

    第一个指针移动到尾部, 共移动n-k-1次, 那么第二个指针同步移动同样次数, 刚好指向第k个节点.

    这里要注意, 总长度小于k的情况, 这样需要访问空.

图解演算:

  iOS常用算法之单链表查找倒数第n个节点(图解)-LMLPHP

  

04-15 23:18