от
Это вопрос от LeetCode, где мне нужно добавить два числа, используя связанные списки. Я был достаточно уверен в том, что я делал, и мой код был принят в тестовом примере по умолчанию. Однако, когда я нажимаю «Отправить», он не работает ни в одном из тестовых случаев.
/**
 * Definition for singly

Я применил метод грубой силы и просто добавил два числа. Это дало мне правильное значение. Затем я создаю новый связанный список, где я сохраняю
цифру и чтобы компенсировать дополнительный элемент в конце, я сохраняю предыдущий узел в каждом случае.
В конце я удаляю связь последнего элемента с дополнительным. Я запускаю свой код и получаю правильный вывод.
Я ожидал [7,0,8] и получил [7,0,8]

Вот обратная связь:

AddressSanitizer: SEGV on unknown address 0x0000000c7616 (pc 0x0000004019db bp 0x7ffff1366900 sp 0x7ffff13668e0 T0)
Там действительно не так много, где об ошибке. Это был самый похожий пример, который я мог найти, но я все равно использовал malloc для выделения памяти, а использование free (prev-> next) все испортило. ссылка на сайт Я также хотел бы уточнить, что я не ищу идеальный ответ, потому что я не хочу обманывать, просто выясните, что я делаю неправильно. редактировать Добавление цикла do-while позволило мне очистить 14 дополнительных тестовых случаев ... из 1563. Появилась новая ошибка
Line 17: Char 15: runtime error: signed integer overflow: 399999999 * 10 cannot be represented in type 'int' (solution.c)

Строка 17 относится к строке num1 = num1 * 10 temp1-> val; Я решил заменить каждое int на long long int, но это не имеет значения, за исключением очистки пяти дополнительных тестовых случаев. (Я приводил каждое значение к long long int, включая константы)              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Я сделал несколько изменений, чтобы не разыменовывать указатель
prev
, когда
num3
равен
0
.
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
 struct ListNode *temp1= l1,*temp2=l2,*temp3=(struct ListNode*)malloc(sizeof(struct ListNode)),*temp4=temp3;
    temp3

По сути, я удалил переменную prev
, вместо этого напрямую назначив
NULL
. Также у вас есть утечка памяти размером
struct ListNode
, когда сумма чисел
0
. Это я позволю тебе разобраться и справиться. Но ваше решение не будет работать, если в списках будет представлено больше цифр, которые в конечном итоге переполнят целые числа
int num3 = num1 num2;
. Наконец, задача состоит в том, чтобы добавить два списка на месте, чтобы не извлекать из них цифры и формировать целые числа.     
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...