Рубрики
Без рубрики

Решение: Подключение узлов в связанном списке

Это является частью серии пояснений решения LeetCode (индекс). Если вам понравилось это решение или Фу … помечены алгоритмами, JavaScript, Java, Python.

Решения LeetCode (161 часть серии)

Это является частью серии объяснений решения LeetCode ( index ). Если вам понравилось это решение или нашел его полезным, Пожалуйста, как этот пост и/или УПОТАТЬ Мое решение пост на форумах LeetCode Отказ

Проблема летета # 1721 (средний): обмен узлы в связанном списке

Описание:

( Перейти к : Идея решения Код : JavaScript | Python |. Java |. C ++

Вам дают голова связанного списка и целого числа k .

Вернуть голова связанного списка после обмениваться Значения к узел с самого начала и к узел с конца (список IS 1-индексирован ).

Примеры:

Вход: голова = [1,2,3,4,5],
Выход: [1,4,3,2,5]
Визуальный
Вход: голова = [ 7,9,6,6,7,8,3,0,9,5],
Выход: [7,9,6,6,8,7,3,0,9,5]
Вход: голова = [ 1],
Выход: [1]
Вход: голова = [ 1,2],
Выход: [2,1]
Вход: голова = [ 1,2,3],
Выход: [1,2,3]

Ограничения:

  • Количество узлов в списке – n Отказ
  • 1^5
  • 0.Паль

Идея:

( Перейти к : Описание проблемы Код : JavaScript | Python |. Java |. C ++

Важно отметить, что инструкции не указывают, что мы должны на самом деле поменяться узлы С просто ценности Отказ Так что единственное, что осталось, это просто найти оба узла.

Поскольку мы не знаем, как долго связан список, нам придется повторить до конца этого, прежде чем мы сможем найти второй узел, чтобы поменяться. Но чтобы облегчить вещи, нам не нужно находить и хранить длину, а затем рассчитать разницу, мы можем просто воспользоваться тем, что расстояние от к Узел к концу то же самое, что и расстояние от начала до к узел с конца.

Мы можем переместить первый список ( A ) вперед к к Узел, обязательно сохранив его в переменной ( nodek ), затем запустите наш шахматный список ( b ) и итерации как до А заканчивается, в какой момент мы должны быть в к узел с конца.

Тогда мы просто поменяем значения и Вернуть голову Отказ

Реализация:

Код для всех четырех языков практически точно так же.

Код JavaScript:

( Перейти к : Описание проблемы Идея решения

var swapNodes = function(head, k) {
    let A = head, B = head, K, temp
    for (let i = 1; i < k; i++) A = A.next
    K = A, A = A.next
    while (A) A = A.next, B = B.next
    temp = K.val, K.val = B.val, B.val = temp
    return head
};

Код Python:

( Перейти к : Описание проблемы Идея решения

class Solution:
    def swapNodes(self, head: ListNode, k: int) -> ListNode:
        A, B = head, head
        for i in range(1, k): A = A.next
        nodeK, A = A, A.next
        while A: A, B = A.next, B.next
        nodeK.val, B.val = B.val, nodeK.val
        return head

Java код:

( Перейти к : Описание проблемы Идея решения

class Solution {
    public ListNode swapNodes(ListNode head, int k) {
        ListNode A = head, B = head, nodeK;
        for (int i = 1; i < k; i++) A = A.next;
        nodeK = A;
        A = A.next;
        while (A != null) {
            A = A.next;
            B = B.next;
        }
        int temp = nodeK.val;
        nodeK.val = B.val;
        B.val = temp;
        return head;
    }
}

C ++ код:

( Перейти к : Описание проблемы Идея решения

class Solution {
public:
    ListNode* swapNodes(ListNode* head, int k) {
        ListNode *A = head, *B = head, *nodeK;
        for (int i = 1; i < k; i++) A = A->next;
        nodeK = A, A = A->next;
        while (A) A = A->next, B = B->next;
        int temp = nodeK->val;
        nodeK->val = B->val, B->val = temp;
        return head;
    }
};

Решения LeetCode (161 часть серии)

Оригинал: “https://dev.to/seanpgallivan/solution-swapping-nodes-in-a-linked-list-ie8”