题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
import java.util.Scanner;
public class Main { public static void main(String[] args) throws Exception{ Scanner in = new Scanner(System.in); while (in.hasNext()){ //1 2 3 4 5 6 7 8 SlingleLinkList nodeList = new SlingleLinkList(); int length = Integer.parseInt(in.next()); int[] arr = new int[length]; for (int i = 0; i < length; i++) { arr[i] = Integer.parseInt(in.next()); nodeList.addNode(new SingleLinkNode(arr[i])); } int index = Integer.parseInt(in.next()); System.out.println(nodeList.findLastIndexSingleLinkNode(length,index).getValue() ); } } } class SlingleLinkList { private SingleLinkNode headNode=null;
public SingleLinkNode getHeadNode() {
return this.headNode;
}
//查找单链表中的倒数第K个节点,找到了则返回该节点,找不到就返回空
public SingleLinkNode findLastIndexSingleLinkNode(int length,int index){
SingleLinkNode head = this.headNode;
if(head.next==null){
return new SingleLinkNode(0);//没有找到
}
//第二次遍历size-index 位置,就是我们倒数的第K个节点
//先做一个index的校验
if(index <=0 || index >length){
return new SingleLinkNode(0);
}
//定义给辅助变量,for循环定位到倒数的index
SingleLinkNode cur = head;//3
for(int i=0;i<length - index;i++){
cur = cur.next;
}
return cur;
}
public void addNode(SingleLinkNode node) throws Exception{ //头插法
if (this.headNode==null) {
this.headNode = node;
return;
}
SingleLinkNode temp = this.headNode;
while(true){
if (temp.next!=null){
temp = temp.next;
}else {
temp.next = node;
break;
}
}
}
//顺便把逆转链表一起复习了
public void reverseNode() throws Exception{ //反转链表
SingleLinkNode lastNode;
if (this.headNode==null || this.headNode.next==null) return;
SingleLinkNode cur = this.headNode;//指针
SingleLinkNode temp;
//第一次
temp = cur.next;
lastNode = cur;
cur = temp;
lastNode.next=null;
while (cur.next!=null){
temp = cur.next;
cur.next = lastNode;
lastNode= cur;
cur = temp;
}
//最后一次
cur.next = lastNode;
this.headNode = cur;
}
} class SingleLinkNode { int value; SingleLinkNode next;
public SingleLinkNode(int value) {
this.value = value;
}
public SingleLinkNode(int value, SingleLinkNode next) {
this.value = value;
this.next = next;
}
public int getValue() {
return value;
}
}