输入一个链表,输出该链表中倒数第k个结点。
这里给出了两种方法:
方法一
废话不多说,先看思维逻辑图:
当你能把下面这幅思维逻辑图能够很好的理解时,那么下面的代码也就很好理解了。
程序如下:
public ListNode findKthToTail1(int k){
if(k <=0 ||k > getLength()) {
return null;
//判断k是否合理
}
ListNode fast = this.head;
ListNode slow = this.head;
while(k-1>0) {
fast = fast.next;
k--;
}
while(fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
方法二
其实这个方法与方法一大同小异,较上一段代码优化了一下,我们简单来看一下即可。
直接上代码:
public ListNode findKthToTail2(int k){
if(k <=0||head == null ) {
return null;
}
ListNode fast = this.head;
ListNode slow = this.head;
while(k-1>0) {
if(fast.next != null){
fast = fast.next;
k--;
}else {
System.out.println("没有这个节点");
return null;
}
}
while(fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}