Java 实现倒数第K个节点的值

来源:互联网 发布:把人变老的软件 编辑:程序博客网 时间:2024/06/15 05:45

package offer;public class FindKthToTail {public static void main(String[] args) {     FindKthToTail list=new FindKthToTail();     Integer result=list.findKthToTail(list.listNode,10);//在listNode 中找到倒数第 10个,测试参数还可能是(null,数字),(list,负数)if(result==null){System.out.println("error");}else{System.out.println(result.toString());}}ListNode listNode;//链表public FindKthToTail() {//初始化的时候生成链表createListNode();}void createListNode() {listNode = new ListNode();listNode.setData(1);ListNode newer, last;last = listNode;for (int i = 0; i < 50; i++) {//后面再生成50个链表节点newer = new ListNode();newer.setData(i);last.setNext(newer);last = newer;}}Integer findKthToTail(ListNode a, int k) {System.out.println("k:"+k);if (a == null || k < 0) {//非法输入返回nullreturn null;}ListNode kthPointToTail = a;ListNode endPoint = a;for (int i = 0; i < k - 1; i++) {endPoint = endPoint.next;if (endPoint == null)//链表的长度不足kreturn null;}while (endPoint.next != null) {//endPoint,kthPointToTail一直往后走,当endPoint走到尾端的时候kthPointToTail指向倒数第k个endPoint = endPoint.next;kthPointToTail = kthPointToTail.next;}return kthPointToTail.getData();}}Nodepublic class ListNode {ListNode next;int data;public ListNode getNext() {return next;}public void setNext(ListNode next) {this.next = next;}public int getData() {return data;}public void setData(int data) {this.data = data;}}//Node 节点package offer;public class ListNode {ListNode next;int data;public ListNode getNext() {return next;}public void setNext(ListNode next) {this.next = next;}public int getData() {return data;}public void setData(int data) {this.data = data;}}