输出单链表的倒数第K个结点
分析:
首先如果链表为空,则不存在第K个结点;如果K小于0,则也不存在倒数第K个结点。对于K大于数组长度的也不存在第K个结点。
接下来是定义两个结点,一个fast,一个slow。既然是求倒数第K个 结点,那么先让快的走K-1步,然后快的和慢的一起走。等到快的走到尾结点的时候,这个时候慢的就走到了倒数第K个结点。
程序如下:
public Node FindKthToTail(int k) {
if (this.head == null || k <= 0) { //k>getLength(),之所以不想把这个判断条件放在if语句里面,原因是不想多遍历一次单链表。在后面按进行判断
return null; //倒数第0个结点,就是null
}
Node fast = this.head;
Node slow = this.head;
while (k - 1 > 0) { //在此处对k>getLength()进行判断。(隐含的对getLength进行判断)
if (fast.next != null) {
fast = fast.next;
k--;
} else {
System.out.println("没有这结点");
return null;
}
}
//前提条件是fast.next不为空,这样slow和fast才能一起走
while (fast.next != null) {
slow = slow.next;
fast = fast.next;
}
return slow;
}