题目(简单)
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
思路
这时一个简单的链表节点输出题,要想输出倒数第k个节点,就需要知道这个节点正数是多少。
经过分析这个节点正数为链表长度length进行count+1-k计算,因此从链表头结点移动到k节点需要count-k次。因此需要先求出length,可以通过遍历链表得到长度。
具体算法
先求出链表长度count,通过遍历链表得到。
int count=0;//链表长度
ListNode cur1=head;
while(cur1!=null){ //计算链表长度
cur1=cur1.next;
count++;
}
得到count后就可以定位到k节点的位置。
ListNode cur2=head;
for(int i=0;i<count-k;i++){
cur2=cur2.next;
}
最后返回节点cur2
实现代码
/**
* 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 count=0;//链表长度
ListNode cur1=head;
while(cur1!=null){ //计算链表长度
cur1=cur1.next;
count++;
}
ListNode cur2=head;
for(int i=0;i<count-k;i++){
cur2=cur2.next;
}
return cur2;
}
}
运行结果