@author: sdubrz
@date: 7/25/2020 10:11:41 AM
难度: 简单
考察内容: 链表
@e-mail: lwyz521604#163.com
题目来自《剑指offer》 电子工业出版社
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
通过次数49,771提交次数63,088
解法 遍历两次链表
- 第一次遍历获得链表的长度,计算出要返回的节点的正序位置。
- 第二次遍历得到结果。
下面是Java程序的实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
int n = 0;
ListNode current = head;
// 第一次遍历,获知链表长度
while(current!=null) {
n++;
current = current.next;
}
if(k>n) { // 链表中元素个数不够
return null;
}
int aim = n-k+1; // 目标节点的正序次序
int ptr = 1;
current = head;
// 第二次遍历到达目标节点
while(ptr<aim) {
current = current.next;
ptr++;
}
return current;
}
}
在 LeetCode 系统中提交的结果为
执行结果:通过显示详情
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.6 MB, 在所有 Java 提交中击败了100.00%的用户