План курса / Все задачи / Алгоритмы и структуры данных
Поиск середины
легко
# решено
Дана голова односвязного списка head. Необходимо найти значение среднего узла этого списка и вернуть его. Если в списке нечётное количество узлов, вернуть единственное значение среднего узла. Если в списке четное количество узлов, вернуть значение второго из двух средних узлов.
Пример 1:
Ввод: head = [1,2,3,4,5]
Вывод: 3
Объяснение: Средний узел списка это узел 3.
Пример 2:
Ввод: head = [1,2,3,4]
Вывод: 3
Объяснение: У списка два средних узла 2 и 3, но по условию задачи надо взять второй.
Пример 3:
Ввод: head = [1]
Вывод: 1
Ограничения:
len(head) >= 0
/**
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public static int MiddleNodeValue(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow.val;
}
}
#include <vector>
using namespace std;
/**
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
int middleNodeValue(ListNode* head) {
ListNode* fast = head;
ListNode* slow = head;
while (fast != nullptr && fast->next != nullptr) {
slow = slow->next;
fast = fast->next->next;
}
return slow->val;
};
package main
/**
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func middleNodeValue(head *ListNode) int {
slow, fast := head, head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
return slow.Val
}
package main
/**
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func middleNodeValue(head *ListNode) int {
slow, fast := head, head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
return slow.Val
}
import java.util.*;
/**
* class ListNode {
* Integer val;
* ListNode next;
* ListNode() {}
* ListNode(Integer val) { this.val = val; }
* ListNode(Integer val, ListNode next) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public int middleNodeValue(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow.val;
}
}
from list_node import ListNode
# class ListNode:
# def __init__(self, val, next=None):
# self.val = val
# self.next = next
def middle_node_value(head: ListNode) -> int:
slow, fast = head, head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow.val
Оценка сложности
Время: O(n), где n - число элементов в односвязном списке head