Size: a a a

2021 February 15

OB

Oleg B in dlang.ru
сам же в tmp вынес tail, видимо, чтобы потом в его поле писать
источник

OB

Oleg B in dlang.ru
а записал не в tmp а в tail
источник

q

qq in dlang.ru
Этот метод работает сравнительно с pop_back().У меня идет проверка ну null (если tail равен null то удалять нечего),если условие верно то присваеваем tail в tmp , дальше присваивает tail  предыдущий елемент и тут опять проверяем если tail равен null то указателю на next уже не нужно присваивать null
источник

q

qq in dlang.ru
Oleg B
tail не null, через 2 строки ты присваиваешь null
я присваиваю указателю next в null
источник

OB

Oleg B in dlang.ru
qq
я присваиваю указателю next в null
ничего не понял, какой next?
источник

q

qq in dlang.ru
Oleg B
ничего не понял, какой next?
следуйщий елемент в списке
источник

OB

Oleg B in dlang.ru
qq
следуйщий елемент в списке
Result shift() nothrow 
   {
       if(tail !is null){ // ты проверил, tail не null, идём дальше
           Element tmp = tail;
           tail = tail.previous; // проверил ли ты что tail.previous не null? нет
           if(head !is null){
               tail.next = null; // так как tail.previous был null, то теперь и tail null -> крах
           }
           return Result(tmp.value,Yes.DList);
       }
       return Result(null,No.DList);
   }
источник

OB

Oleg B in dlang.ru
qq
следуйщий елемент в списке
где в этом коде next я так и не понял
источник

OB

Oleg B in dlang.ru
ахаха
источник

q

qq in dlang.ru
Oleg B
где в этом коде next я так и не понял
tail.next
источник

OB

Oleg B in dlang.ru
ебать я заработался
источник

OB

Oleg B in dlang.ru
ну короч смысла не меняет)))
источник

OB

Oleg B in dlang.ru
tail.previous у тебя в какой-то момент null
источник

OB

Oleg B in dlang.ru
либо проверить нужно ещё раз, либо писать не в tail а в tmp
источник

OB

Oleg B in dlang.ru
тут уже детали логики
источник

O

Oleg in dlang.ru
1. зачем хранить и tail и head, если tail=head?.prev
2. что делает shift? что такое Result?
3. Олег грит
  tail = tail.prev; // возможно здесь присваиваешь null
  tail.next = null; // а здесь разыменовываешь тот null
источник

O

Oleg in dlang.ru
по 1. если у тебя одна и та же инфа хранится в 2х переменных, то ты когданить забываешь их синхронизировать - меняя одно, не меняешь второе
источник

OB

Oleg B in dlang.ru
Oleg
по 1. если у тебя одна и та же инфа хранится в 2х переменных, то ты когданить забываешь их синхронизировать - меняя одно, не меняешь второе
для такого кейса можно использовать инвариант, кстати
источник

q

qq in dlang.ru
Oleg B
для такого кейса можно использовать инвариант, кстати
у меня уже стоит
`invariant
   {
       if (head !is null)
       {
           assert(tail.next is null);
           assert(head.previous is null);
       }
   }`
источник

OB

Oleg B in dlang.ru
зачем проверять head !is null?
источник