Я делаю кодирование с помощью leetcode. Что касается двух добавочных чисел, мое решение не может быть принято, потому что я не использовал new при создании struct. Вот мой код:new необходимо использовать для создания структуры?
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
struct ListNode temp(-1);
struct ListNode *pre = &temp;
bool PlusOne = false;
int val1 = 0;
int val2 = 0;
int sum;
while (NULL != l1 || NULL != l2)
{
if (NULL != l1)
{
val1 = l1->val;
l1 = l1->next;
}
if (NULL != l2)
{
val2 = l2->val;
l2 = l2->next;
}
if (PlusOne == true)
{
sum = (val1 + val2 + 1) % 10;
PlusOne = (val1 + val2 + 1)/10;
}
else
{
sum = (val1 + val2) % 10;
PlusOne = (val1 + val2)/10;
}
struct ListNode newNode(sum);
pre->next = &newNode;
pre = &newNode;
val1 = 0;
val2 = 0;
}
if (true == PlusOne)
{
struct ListNode newNode(1);
pre->next = &newNode;
}
pre = temp.next;
return pre;}
Это говорит об ошибке во время выполнения, но это работает, если я использую предварительно> следующая = новый ListNode (1) замена STRUCT ListNode newNode (1); pre-> next = & newNode;
Есть ли кто-нибудь знает почему?
Ваша программа плохо сформирована. В трех местах вы настраиваете обратный адрес автоматической переменной, которая уничтожается при выводе области. Любое использование указанного адреса, включая разыменование и даже оценку, вызывает * неопределенное поведение *. То, что вы засвидетельствовали, что «работа» на данной платформе не имеет значения, и свидетельство в замешательстве * наблюдаемого * поведения с * определенным * поведением. Вызов неопределенного поведения делает любое такое наблюдение бессмысленным. – WhozCraig
Советы по стилю: Не делайте этого: 'if (true == PlusOne)'. 'PlusOne' уже является логическим, и вы, вероятно, не будете делать' if (true == (true == PlusOne)) ' – milleniumbug
@milleniumbug, просьба дать более подробную информацию об этом. Я не понимал, что вы имели в виду. Спасибо! –