88import ru .yandex .javacource .golotin .schedule .model .Task ;
99
1010public class InMemoryHistoryManager implements HistoryManager {
11+
1112 private static class Node {
1213 Task item ;
1314 Node next ;
@@ -20,15 +21,21 @@ private static class Node {
2021 }
2122 }
2223
23- Map <Integer , Node > history = new HashMap <>();
24- Node first ;
25- Node last ;
24+ private static final Map <Integer , Node > history = new HashMap <>();
25+ private Node first ;
26+ private Node last ;
2627
2728 @ Override
2829 public void add (Task task ) {// добавление Task
29- Node node = history .get (task .getId ());
30- removeNode (node );
31- linkLast (task );
30+
31+ if (task == null ) {
32+ return ;
33+ }else {
34+ remove (task .getId ());
35+ linkLast (task );
36+ history .put (task .getId (), last );
37+
38+ }
3239 }
3340
3441 @ Override
@@ -45,22 +52,40 @@ public List<Task> getAll() {// вывод списка истории
4552
4653 @ Override
4754 public void remove (int id ) {// удаление по id
48- Node node = history .get (id );
55+ final Node node = history .remove (id );
56+ if (node == null ) {
57+ return ;
58+ }
4959 removeNode (node );
5060 }
5161
52- private void removeNode (Node node ) {// Удаление из связанного списка
53- history .remove (node .item .getId ());
62+ private void removeNode (Node node ) {
63+
64+ if (node .prev != null ) {
65+ node .prev .next = node .next ;
66+ if (node .next == null ) {
67+ last = node .prev ;
68+ } else {
69+ node .next .prev = node .prev ;
70+ }
71+ } else {
72+ first = node .next ;
73+ if (first == null ) {
74+ last = null ;
75+ } else {
76+ first .prev = null ;
77+ }
78+ }
5479 }
5580
56- void linkLast (Task task ) {// двигаем историю
57- final Node l = last ;
58- final Node newNode = new Node (l , task , null );
81+ private void linkLast (Task task ) {// двигаем историю
82+ final Node lastLink = last ;
83+ final Node newNode = new Node (lastLink , task , null );
5984 last = newNode ;
60- if (l == null ) {
85+ if (lastLink == null ) {
6186 first = newNode ;
6287 } else {
63- l .next = newNode ;
88+ lastLink .next = newNode ;
6489 }
6590 }
6691}
0 commit comments