package com.fjf.test;
import com.fjf.test.Test15.ListNode;
/**
*
* @author fjf
* 2018年8月19日 22:46:11
*输入一个链表,输出该链表中倒数第k个结点。
*/
public class Test14 {
public static void main(String[] args) {
Mylink l = new Mylink();
for (int i = 0; i < 10; i++) {
l.addLink(i);
}
l.print(l.head);
System.out.println("------------");
int K = 10;
Solution s = new Solution();
ListNode K_node = s.FindKthToTail(l.head, K);
System.out.println("输出倒数第"+K+"个节点,其值为:"+K_node.val);
}
/**
*
* @author fjf
* p q 两个节点。p先走K-1,然后带q一起走。相当于拉一把尺子。当P走到最后时,尺子的另一端q正好走到K。
*
*/
static class Solution{
ListNode FindKthToTail(ListNode head,int k) {
if(head==null){
return null;
}
ListNode p ,q ;
p = q = head;
int i = 0; //i作为一个计步器,计量尺子拉了多长
for (i=0;p !=null; i++) {
if(i>=k){ //i没到达K之前,q一直不走
q = q.next;
}
p = p.next;
}
return i<k?null:q;
}
}
//定义链表
static class Mylink{
public ListNode head;
public ListNode current;
public void addLink(int data){
if(head==null){
head = new ListNode(data);
current = head;
}else{
current.next = new ListNode(data);
current = current.next;
}
}
public void print(ListNode head){
if(head == null){
return;
}
current = head;
while(current!=null){
System.out.println(current.val);
current = current.next;
}
}
}
//定义节点
static class ListNode{
int val;
ListNode next =null;
ListNode(int val) {
this.val = val;
}
}
}
jzoffer-14:输入一个链表,输出该链表中倒数第k个结点
最新推荐文章于 2021-11-24 20:17:04 发布