输入一个链表,输出该链表中倒数第k个结点。
分析:
设置两个指针,一个快指针、一个慢指针,快指针和慢指针开始时都指向链表第一个节点,然后让快指针向后走k-1个节点,再让满指针和快指针同时向后走,当快指针指向的下一个节点为空时,慢指针所指向的节点即为所求。
本文是考虑的单链表。
代码如下:
//单链表进行考虑
public class ListNode {
int val; //自身值
ListNode next = null; //指向下一个节点
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode FindKthToTail(ListNode head, int k) {
if(head == null || k <= 0){
return null;
}
ListNode quick = head;
ListNode slow = head;
//先让快指针向后走k个节点
for(int i = k;i > 1;i--){
if(quick.next != null){
quick = quick.next;
}else{
return null;
}
}
//快指针和慢指针同时走
while(quick.next != null){
slow = slow.next;
quick = quick.next;
}
return slow;
}
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = null;
Solution s = new Solution();
ListNode result = s.FindKthToTail(node1, 3);
System.out.println(result.val);
}
}