博客
关于我
2020-07-16:如何获得一个链表的倒数第n个元素?
阅读量:277 次
发布时间:2019-03-01

本文共 721 字,大约阅读时间需要 2 分钟。

福哥答案2020-07-16:

1.快慢指针。快指针先走n步,然后快慢指针同时走,直到快指针走到尾。
2.两次遍历。第一次遍历获取链表长度,然后计算出序号,然后遍历获取序号下的元素。
3.数组保存。遍历一次保存到数组,然后计算序号,这样就能获取到元素。
4.栈保存。遍历一次链表,遍历的过程中将元素放到一个栈当中,遍历完毕之后再将元素从栈中弹出,弹出的第n个元素就是倒数第n个元素。

最好的方式是第1种方式。但是对于大公司的面试,可不仅仅是解题,还会让你说出好几种方法,面试才能过关。

代码用golang编写,采用第1种方式,代码在leetcode里测试,题目是【面试题 02.02. 返回倒数第 k 个节点】,代码如下:

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func kthToLast(head *ListNode, k int) int {       //快慢指针    fast := head    slow := head    //快指针先走k步    for k > 0 {           fast = fast.Next        k--    }    //快慢指针走剩下的,直到快指针走到尾    for fast != nil {           slow = slow.Next        fast = fast.Next    }    //慢指针就是所求的值    return slow.Val}

执行结果如下:
在这里插入图片描述


转载地址:http://rqmo.baihongyu.com/

你可能感兴趣的文章
神经元与神经网络一之概述
查看>>
神经网络二之手写数字识别
查看>>
神经网络六之反向传播
查看>>
第五章 数字滤波器的基本结构之三
查看>>
FANUC机器人R-30iB_R-30iB PLUS备件规格型号统计整理
查看>>
FANUC机器人的镜像备份操作及U盘格式化具体步骤
查看>>
vue-依赖-点击复制
查看>>
js井子棋
查看>>
css取消双击选中文字
查看>>
LeetCode 116填充每个节点的下一个右侧结点指针
查看>>
C++小笔记——function绑定重载函数、私有继承用的条件
查看>>
2021-4-28【PTA】【L2-1 包装机 (25 分)】
查看>>
2021-5-2【指针】【作业】【指针代替下标进行数组编程】
查看>>
Arduino mega2560+MPU6050利用加速度值控制舵机
查看>>
pycharm+python+MS SQLSERVER 实战2、实现爬虫程序。
查看>>
判断字符是否出现
查看>>
深入理解数组指针与指针数组的区别
查看>>
iOS客户端与PHP服务端的简单交互
查看>>
Python的异常处理
查看>>
Kubernetes(k8s)的调度器详细介绍
查看>>