ClassLoader
类的 loadClass()
方法实现的。
双亲委派机制的优点在于它可以保证 Java 类的唯一性,防止重复加载,同时也可以保证 Java 类的安全性,因为核心类库是由启动类加载器加载的,而开发者编写的类通常由应用类加载器加载,这样可以防止开发者意外或恶意地替换核心类库中的类。
总的来说,类加载的双亲委派机制有助于保证类加载的顺序和唯一性,同时也有利于 Java 的安全性和稳定性。
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
if (head == null || k <= 0) {
return null;
}
ListNode slow = head;
ListNode fast = head;
// 让快指针先移动k步
for (int i = 0; i < k; i++) {
if (fast == null) {
return null; // 如果链表长度小于k,则返回null
}
fast = fast.next;
}
// 快慢指针一起移动,直到快指针到达链表末尾
while (fast != null) {
slow = slow.next;
fast = fast.next;
}
// 此时慢指针即指向倒数第k个节点
return slow;
}
public static void main(String[] args) {
// 创建一个链表: 1 -> 2 -> 3 -> 4 -> 5
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
Solution solution = new Solution();
int k = 2;
ListNode result = solution.getKthFromEnd(head, k);
// 打印倒数第k个节点的值
if (result != null) {
System.out.println("倒数第 " + k + " 个节点的值为: " + result.val);
} else {
System.out.println("链表长度小于 " + k + ",无法找到倒数第 " + k + " 个节点");
}
}
}