问题描述:
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
思路:快指针先走k步,然后快慢指针一起走到快指针到头为止,这时慢指针就是答案。
上代码,拿去即可运行:
package com.onlyqi.upup01.leetcode;
public class Test03 {
public static void main(String[] args) {
LinkList linkList1=new LinkList(1);
LinkList linkList2=new LinkList(2);
LinkList linkList3=new LinkList(3);
LinkList linkList4=new LinkList(4);
LinkList linkList5=new LinkList(5);
LinkList linkList6=new LinkList(6);
linkList1.setNext(linkList2);
linkList2.setNext(linkList3);
linkList3.setNext(linkList4);
linkList4.setNext(linkList5);
linkList5.setNext(linkList6);
System.out.println(getKthFromEnd(linkList1,3).getValue());
}
public static LinkList getKthFromEnd(LinkList head, int k) {
LinkList first = head, latter = head;
for (int i = 0; i < k; i++) {
System.out.println(first.getNext());
first = first.getNext();
}
while (first != null) {
first = first.getNext();
latter = latter.getNext();
}
return latter;
}
}
class LinkList {
int value;
LinkList next;
public LinkList() {
}
public LinkList(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public LinkList getNext() {
return next;
}
public void setNext(LinkList next) {
this.next = next;
}
}
我要刷300道算法题,第111道 。