Вот конкретные требования:
Реализовать метод, который сможет найти k-й узел с конца и m-й узел с начала за один проход по связанному списку.
Если в списке недостаточно узлов (т.е. если k или m превышают длину списка) , обрабатывайте это корректно (например, возвращайте ноль или значение по умолчанию).
Например, для данного связанного списка 1 -> 2 -> 3 -> 4 -> 5 и k = 2 и m = 3 метод должен возвращать узел 3 с конца (4) и узел 3 с начала (3).
Вот упрощенная версия моей реализации связанного списка:
Код: Выделить всё
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class FindNodes {
public static ListNode[] findNodes(ListNode head, int k, int m) {
// Implement the logic here
}
public static void main(String[] args) {
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);
int k = 2;
int m = 3;
ListNode[] result = findNodes(head, k, m);
if (result != null && result.length == 2) {
System.out.println("K-th node from the end: " + result[0].val);
System.out.println("M-th node from the beginning: " + result[1].val);
} else {
System.out.println("Nodes not found.");
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... om-the-beg