/*
* 面试题22:链表中的倒数第k个节点
* 题目:输入一个链表,输出该链表中倒数第k个节点。
* 为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。
* 思路:为了实现只遍历链表一次就能找到倒数第k个节点,可以定义两个指针。
* 第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;
* 从第k步开始。第二个指针也开始从链表的头指针开始遍历。
* 由于两个指针的距离保持在k-1,当第一个指针到达尾节点时,第二个指针正好是倒数第k个节点。
*/
class ListNode1 {
int val;
ListNode1 next = null;
ListNode1(int val) {
this.val= val;
}
}
public class No22KthNodeFromEnd {
public static void main(String[] args) {
ListNode1 head = new ListNode1(1);
ListNode1 second = new ListNode1(2);
ListNode1 third = new ListNode1(3);
ListNode1 forth = new ListNode1(4);
head.next = second;
second.next = third;
third.next = forth;
//No22KthNodeFromEnd n = new No22KthNodeFromEnd();
int result = findKthToTail(head, 1).val;
System.out.println(result);
}
public static ListNode1 findKthToTail(ListNode1 head , int k) {
if(head == null || k <= 0) {
return null;
}
ListNode1 aNode = head;
ListNode1 bNode = null;
for(int i = 0; i < k-1; i++) {
if(aNode.next != null)
aNode = aNode.next;
else
return null;
}
bNode = head;
while(aNode.next != null) {
aNode = aNode.next;
bNode = bNode.next;
}
return bNode;
}
}
面试题22:链表中的倒数第k个节点
最新推荐文章于 2022-05-04 20:19:51 发布