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、返回后面的指针。