题意:
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
思路:
返回第四个结点,后面的都会跟着返回,并非只有一个
1.这里使用双指针的方法:
former 初始值 为head
latter 初始值为 head;
二者刚开始都指向,头结点
2.构建双指针的距离:
前指针former 先向前 走 k 步。 此时二者相差k
3.两个指针共同移动,
通过循环,直到前指针former跳出尾结点,此时latter指针与尾结点相差k-1 ,说明 latter指向的是倒数第k个结点。
4.返回latter。 便可输出之后所以元素。
代码实现:
/**
* 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) {
ListNode latter = head, former = head;
for(int i = 0; i < k; i++){
former = former.next;
}
while(former != null){
former = former.next;
latter = latter.next;
}
return latter;
}
}
1334

被折叠的 条评论
为什么被折叠?



