剑指offer面试题22:链表中倒数第k个节点(Java 实现)

题目:输入一个链表,输出该链表中倒数第k个结点。

思路:定义一快一慢两个指针,快的指针先走到 k-1 的位置,然后从第 k 个位置开始,两个指针同时走,当快的指针走到最后一个位置的时候,慢指针所在的位置就是倒数第 k-1 的位置。

测试用例:
1. 功能测试:第k个节点位于链表的中间;第k个节点是链表的第一个节点;第k个节点是链表的最后一个节点。
2. 负面测试:输入的链表头结点为空;链表的节点总数少于k。
 

public class test_twenty_two {
	public ListNode findKthToTail(ListNode head, int k){
		if(head == null || k<=0)return null;
		
		ListNode slow = head;
		ListNode fast = head;
		
		while(k-- > 1){
			if(fast!=null){
				fast = fast.next;
			}
			else return null;
		}
		while(fast.next!=null){
			slow = slow.next;
			fast = fast.next;
		}
		return slow;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41163113/article/details/88044104