题目:
输入一个链表,输出该链表中倒数第k个结点。链表中倒数第k个结点
1.分析
- 遍历单链表一遍就能知道倒数第k个结点
- 让
fast
和slow
指向head - 首先让
fast
走k-1步,然后slow和fast一人一步走,当fast.next=null
的时候,slow
所指的位置就是倒数第k个结点的位置。
2.具体步骤
但是对于k值有要求,k必须大于0且小于等于链表长度
链表长度怎么求呢?
画图演示:
3.代码
//链表中倒数第k个结点
public ListNode FindKthToTail(ListNode head, int k) {
if (k <= 0 || head == null) {
return null;
}
ListNode fast = head;
ListNode slow = head;
while (k - 1 != 0) {
fast = fast.next;
if (fast == null) {
return null;
}
k--;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
测试:
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
//myLinkedList.createList();
myLinkedList.addLast(12);
myLinkedList.addLast(23);
myLinkedList.addLast(34);
myLinkedList.addLast(45);
myLinkedList.addLast(56);
myLinkedList.display();
ListNode ret=myLinkedList.FindKthToTail(4);
System.out.println(ret.val);
}