一言不合继续上代码
/**
* 输出链表中倒数地K个节点的内容
* @param
* @return
*/
public Node point(int k) {
Node slow = this.head;
Node fast = this.head;
if (k<=0) {
System.out.println("K取值不合法!!!");
return null;
}
while (k -1 > 0) {
if (fast != null) {
fast = fast.next;
k--;
}else{
System.out.println("K取值不合法!!!");
return null;
}
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
倒数第K个节点,通过两个节点差来做度量:
让Fast节点先走K-1步,然后两节点再一起走,直至Fast到达null退出循环,此时Slow的位置即距离队尾倒数k个节点的位置;
public static void main(String[] args) {
ReLinkList reLinkList = new ReLinkList();
reLinkList.addLast(1);
reLinkList.addLast(2);
reLinkList.addLast(3);
reLinkList.addLast(4);
reLinkList.addLast(5);
reLinkList.addLast(6);
System.out.print("\n******************\n");
System.out.print("中间节点data为:" + " ");
System.out.print(reLinkList.MidNode().data);
System.out.print("\n******************\n");
System.out.println(reLinkList.point(0).data);
}
总结:
这里用到的思维路线很数学,其他就是熟练单链表的遍历方法即循环条件的寻找