Я нашел отличный блок кода для создания отсортированного объединенного списка. Однако есть две строчки кода, которые я не могу обернуть вокруг:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode dummy(0);
ListNode *tail = &dummy;
while(l1 && l2) {
ListNode *& node = l1->val < l2->val? l1 : l2;
tail->next = node;
tail = node;
node = node->next;
}
tail->next = l1 ? l1 : l2;
return dummy.next;
}
Почему нам нужно установить tail->next = node
перед настройкой tail = node
? Я заметил, что "tail = node" переписывает присваивание в предыдущей строке независимо от этого.
Но я также заметил, что мой код ломается, если у меня нет "tail-> next = node".
Спасибо!