Как этот метод appendToTail () работает в односвязном списке? - PullRequest
0 голосов
/ 27 мая 2020
• 1000 ListNode, где он затем установит свойство next на ListNode, который будет добавлен. Я думаю, у меня есть вопрос, как не теряется ГОЛОВА списка при вызове этого метода? Если вы пройдетесь по коду, кажется, что должен быть возвращен связанный список только с двумя узлами. Я воссоздал проблему в своей среде IDE и решил ее с помощью отладчика, но это все еще кажется неясным. Я опубликую полный контекст своего кода ниже на случай, если мне что-то не нужно учитывать. Спасибо за помощь!
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode resultHEAD = new ListNode();
        ListNode pointer1 = l1;
        ListNode pointer2 = l2;

        if (l1 == null)
            return l2;
        else if (l2 == null)
            return l1;

        while (pointer1 != null && pointer2 != null)
        {
            if (pointer1.val < pointer2.val)
            {
                appendToTail(resultHEAD, pointer1.val);
                pointer1 = pointer1.next;
            }
            else if (pointer1.val > pointer2.val)
            {
                appendToTail(resultHEAD, pointer2.val);
                pointer2 = pointer2.next;
            }
            else
            {
                // Arbitrarily select from l1
                appendToTail(resultHEAD, pointer1.val);
                pointer1 = pointer1.next;
            }
        }

        // Check which list is empty and append the rest of that list
        if (pointer1 != null)
        {
            while(pointer1 != null)
            {
                appendToTail(resultHEAD, pointer1.val);
                pointer1 = pointer1.next;
            }
        }
        else
        {
            while(pointer2 != null)
            {
                appendToTail(resultHEAD, pointer2.val);
                pointer2 = pointer2.next;
            }
        }

        return resultHEAD.next;
    }

    public ListNode appendToTail (ListNode head, int valueOfNodeToAdd)
    {
        ListNode traveller = head;
        while (traveller.next != null)
        {
            traveller = traveller.next;
        }
        traveller.next = new ListNode(valueOfNodeToAdd);

        return traveller;

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