/**
* 题目:
* 输入一个链表,输出该链表中倒数第k个结点。
* 解题思路:
* 倒数第k个结点是正数第n-k+1个结点。
* 定义两个结点node1,node2,均指向头结点,首先将node2先走k-1步,
* 然后node1,node2开始同时前进,当node2走到链表结尾时,node1就
* 是倒数第k个结点
* 特殊情况:链表为空或者k=0,返回空。
*/
public class P134_FindKthToTail {
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null || k == 0) {
return null;
}
ListNode node1 = head;
ListNode node2 = head;
for (int i = 0; i < k; i++) {
if (node2 == null) {
return null;
}
node2 = node2.next;
}
while (node2 != null) {
node1 = node1.next;
node2 = node2.next;
}
return node1;
}
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);
ListNode node6 = new ListNode(6);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
node6.next = null;
P134_FindKthToTail test = new P134_FindKthToTail();
ListNode result = test.FindKthToTail(node1, 3);
System.out.print(result.val);
}
}
剑指offer:链表中倒数第k个结点(java)
最新推荐文章于 2021-07-25 10:44:17 发布