почему head.next печатает весь связанный список? - PullRequest
0 голосов
/ 03 июня 2019

Я решал проблему в Leetcode. Проблема состоит в том, чтобы объединить два связанных списка и вернуть окончательный список. Ссылка на вопрос: https://leetcode.com/problems/merge-two-sorted-lists/. Я думал, что head.next просто указывает на один узел всего связанного списка, но возвращение head.next дает все узлы связанного списка. Не могли бы вы объяснить мне, почему?

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode curr = head;

        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                curr.next = l1;
                l1 = l1.next;
            } else {
                curr.next =l2;
                l2 = l2.next;
            }
            curr = curr.next;
        }

        if (l1 != null) {
            curr.next = l1;
        } else if ( l2 != null) {
            curr.next = l2;
        }
        return head.next;
    }
}

Итак, мои тестовые входы: l1 = [1,2,4], l2 = [1,3,4]. Я ожидал получить только 1, потому что с помощью sys.out (head.next) я получаю только 1, а не весь связанный список.

1 Ответ

0 голосов
/ 03 июня 2019

Я дал аналогичный ответ в комментарии, но, надеюсь, некоторое необычное форматирование сделает это немного понятнее.

Представьте себе список ввода [1,2,3].При создании связанного списка из этого объект head выглядит следующим образом (представлен в формате JSON):

{
    "val" : 1,
    "next" : {
        "val" : 2,
        "next" : {
            "val" : 3,
            "next": null
        }
    }
}

Таким образом, значение head.next равно:

{
    "val" : 2,
    "next" : {
        "val" : 3,
        "next": null
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...