链表中倒数第k个节点
public class Reverse{
static class LNode{
int data;
LNode next;
public LNode(int data){
this.data = data;
}
}
LNode head;
LNode current;
public void add(int data){
if(head == null){
head = new LNode(data);
current = head;
}else{
current.next = new LNode(data);
current = current.next;
}
}
public void print(LNode node){
LNode temp = node;
while(temp!=null){
System.out.println(temp.data);
temp = temp.next;
}
}
public LNode KNode(LNode head,int k){
LNode before = head;
LNode behind = head;
if(head == null || k==0) return null;
for(int i=1;i<k;i++){
if(before.next != null){
before = before.next;
}else {
return null;
}
}
while(before.next!=null){
before = before.next;
behind = behind.next;
}
return behind;
}
public static void main(String[] args){
Reverse r = new Reverse();
for(int i=1;i<10;i++){
r.add(i);
}
//r.print(r.head);
//倒数di yi g倒数第一个jie dian
// LNode result = r.KNode(r.head,1);
// r.print(result);
//倒数第0个节点
// LNode result = r.KNode(r.head,0);
// r.print(result);
//dao shu倒数倒数第di倒数第第10ge jie dian个节点
LNode result = r.KNode(r.head,10);
r.print(result);
}
}
这道题的关键在于:
1、首先对输入参数进行比较:head=0||k=0都返回为空。
2、分为两个链表,其中一个指针先走k-1步,然乎再同时往后走,判断条件是:before.next!=null
3、返回后面的指针。

浙公网安备 33010602011771号