世界这么大,人生这么长,总会有这么一个人,让你想要温柔对待。
原题如下:
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
审题:
题目也还是很好理解,就是输出一个单链表的倒数第K个结点。
可能给我们的单链表的情况:
1.空的单链表;
2.有多个结点,但是K的值不合理(即K的值大于链表的长度或K小于1);
3.有多个结点,且K的值是合理的。
方案设计:
本题的核心问题是如何确定K的值
第一种方案:
这种方案肯定是大家都能想到的,就是先通过遍历一遍链表,计算出单链表有几个结点。则可以判断K值是否合理,也就可以得出其倒数第K个结点是哪一个结点了。这种方案易懂,编写算法也容易,但是这种方案相比执行效率不高,毕竟要通过遍历两次。在这里就不分析过程了,直接给出代码如下:
class Solution {
public:
ListNode*