zoukankan      html  css  js  c++  java
  • Cracking the coding interview--Q2.2

    题目

    原文:

    Implement an algorithm to find the nth to last element of a singly linked list.

    译文:

    实现一个算法从一个单链表中返回倒数第n个元素。

    解答

    思路一:这道题的考点在于我们怎么在一个单链表中找到倒数第n个元素? 由于是单链表,所以我们没办法从最后一个元素数起,然后数n个得到答案。 但这种最直观的思路显然是没错的,那我们有没有办法通过别的方式,从最后的元素数起数 n个来得到我们想要的答案呢。

    这个次序颠倒的思路可以让我们联想到一种数据结构:栈。

    我们如果遍历一遍单链表,将其中的元素压栈,然后再将元素一一出栈。那么, 第n个出栈的元素就是我们想要的。

    那我们是不是需要显式地用栈这么一个结构来做这个问题呢?答案是否。看到栈,我们应当 要想到递归,它是一种天然使用栈的方式。所以,第一种解决方案用递归,让栈自己帮我 们从链表的最后一个元素数起。

    思路很简单,如果指向链表的指针还未空,就不断递归。当指针为空时开始退递归,这个过 程n不断减1,直接等于1,即可把栈中当前的元素取出。

    思路二:两次遍历,设总数为k,遍历一遍求出k。然后进行第二次遍历,计数直至遍历到k-n+1位置即为倒数第n个数。

    思路三:标尺法,设两个指针,之间相差n-1个数,较快的指针只想最后一个元素时,较慢的指针即为倒数第n个数。

  • 相关阅读:
    如何打开windows的远程桌面
    mongodb存储引擎
    使用场景举例
    webpack初识
    mongodb快速入门
    mongodb初识
    mysql主从复制与读写分离
    gradle简单配置跟模块依赖
    mysql执行计划
    synchronized的可见性理解
  • 原文地址:https://www.cnblogs.com/sooner/p/3180697.html
Copyright © 2011-2022 走看看