< Summary

Information
Class: LeetCode.Algorithms.DesignFrontMiddleBackQueue.DesignFrontMiddleBackQueueLinkedList
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\DesignFrontMiddleBackQueue\DesignFrontMiddleBackQueueLinkedList.cs
Line coverage
73%
Covered lines: 93
Uncovered lines: 33
Coverable lines: 126
Total lines: 234
Line coverage: 73.8%
Branch coverage
64%
Covered branches: 22
Total branches: 34
Branch coverage: 64.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
PushFront(...)50%2264.28%
PushMiddle(...)70%121074.19%
PushBack(...)50%2264.28%
PopFront()75%4481.25%
PopMiddle()66.66%141277.41%
PopBack()50%4468.75%
.ctor(...)100%11100%
get_Next()100%11100%
get_Previous()100%11100%
get_Value()100%11100%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\DesignFrontMiddleBackQueue\DesignFrontMiddleBackQueueLinkedList.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2025 Eugene Eremeev (also known as Yevhenii Yeriemeieiv).
 3// All Rights Reserved.
 4// --------------------------------------------------------------------------------
 5// This software is the confidential and proprietary information of Eugene Eremeev
 6// (also known as Yevhenii Yeriemeieiv) ("Confidential Information"). You shall not
 7// disclose such Confidential Information and shall use it only in accordance with
 8// the terms of the license agreement you entered into with Eugene Eremeev (also
 9// known as Yevhenii Yeriemeieiv).
 10// --------------------------------------------------------------------------------
 11
 12namespace LeetCode.Algorithms.DesignFrontMiddleBackQueue;
 13
 14/// <inheritdoc />
 15public class DesignFrontMiddleBackQueueLinkedList : IDesignFrontMiddleBackQueue
 16{
 17    private int _count;
 18    private Node? _head;
 19    private Node? _tail;
 20
 21    /// <summary>
 22    ///     Time complexity - O(1)
 23    ///     Space complexity - O(1)
 24    /// </summary>
 25    /// <param name="value"></param>
 26    public void PushFront(int value)
 127    {
 128        if (_head == null)
 129        {
 130            var node = new Node(value);
 31
 132            _head = node;
 133            _tail = node;
 134        }
 35        else
 036        {
 037            var node = new Node(value) { Next = _head };
 38
 039            _head.Previous = node;
 040            _head = node;
 041        }
 42
 143        _count++;
 144    }
 45
 46    /// <summary>
 47    ///     Time complexity - O(n)
 48    ///     Space complexity - O(1)
 49    /// </summary>
 50    /// <param name="value"></param>
 51    public void PushMiddle(int value)
 252    {
 253        if (_count == 0)
 054        {
 055            var node = new Node(value);
 56
 057            _head = node;
 058            _tail = node;
 059        }
 60        else
 261        {
 262            var node = new Node(value);
 63
 264            var middleIndex = _count / 2;
 265            var current = _head;
 66
 867            for (var i = 0; i < middleIndex; i++)
 268            {
 269                current = current?.Next;
 270            }
 71
 272            if (current != null)
 273            {
 274                node.Next = current;
 275                node.Previous = current.Previous;
 76
 277                if (current.Previous != null)
 278                {
 279                    current.Previous.Next = node;
 280                }
 81                else
 082                {
 083                    _head = node;
 084                }
 85
 286                current.Previous = node;
 287            }
 288        }
 89
 290        _count++;
 291    }
 92
 93    /// <summary>
 94    ///     Time complexity - O(1)
 95    ///     Space complexity - O(1)
 96    /// </summary>
 97    /// <param name="value"></param>
 98    public void PushBack(int value)
 199    {
 1100        if (_tail == null)
 0101        {
 0102            var node = new Node(value);
 103
 0104            _head = node;
 0105            _tail = node;
 0106        }
 107        else
 1108        {
 1109            var node = new Node(value) { Previous = _tail };
 110
 1111            _tail.Next = node;
 1112            _tail = node;
 1113        }
 114
 1115        _count++;
 1116    }
 117
 118    /// <summary>
 119    ///     Time complexity - O(1)
 120    ///     Space complexity - O(1)
 121    /// </summary>
 122    /// <returns></returns>
 123    public int PopFront()
 2124    {
 2125        if (_head == null)
 1126        {
 1127            return -1;
 128        }
 129
 1130        var head = _head;
 131
 1132        _head = _head.Next;
 133
 1134        if (_head != null)
 1135        {
 1136            _head.Previous = null;
 1137        }
 138        else
 0139        {
 0140            _tail = null;
 0141        }
 142
 1143        _count--;
 144
 1145        return head.Value;
 2146    }
 147
 148    /// <summary>
 149    ///     Time complexity - O(n)
 150    ///     Space complexity - O(1)
 151    /// </summary>
 152    /// <returns></returns>
 153    public int PopMiddle()
 2154    {
 2155        if (_head == null)
 0156        {
 0157            return -1;
 158        }
 159
 2160        var middleIndex = (_count - 1) / 2;
 2161        var current = _head;
 162
 6163        for (var i = 0; i < middleIndex; i++)
 1164        {
 1165            current = current?.Next;
 1166        }
 167
 2168        if (current == null)
 0169        {
 0170            return -1;
 171        }
 172
 2173        var middle = current;
 174
 2175        if (current.Previous != null)
 1176        {
 1177            current.Previous.Next = current.Next;
 1178        }
 179        else
 1180        {
 1181            _head = current.Next;
 1182        }
 183
 2184        if (current.Next != null)
 2185        {
 2186            current.Next.Previous = current.Previous;
 2187        }
 188        else
 0189        {
 0190            _tail = current.Previous;
 0191        }
 192
 2193        _count--;
 194
 2195        return middle.Value;
 2196    }
 197
 198    /// <summary>
 199    ///     Time complexity - O(1)
 200    ///     Space complexity - O(1)
 201    /// </summary>
 202    /// <returns></returns>
 203    public int PopBack()
 1204    {
 1205        if (_tail == null)
 0206        {
 0207            return -1;
 208        }
 209
 1210        var tail = _tail;
 211
 1212        _tail = _tail.Previous;
 213
 1214        if (_tail != null)
 0215        {
 0216            _tail.Next = null;
 0217        }
 218        else
 1219        {
 1220            _head = null;
 1221        }
 222
 1223        _count--;
 224
 1225        return tail.Value;
 1226    }
 227
 4228    private class Node(int value)
 229    {
 16230        public Node? Next { get; set; }
 20231        public Node? Previous { get; set; }
 8232        public int Value { get; } = value;
 233    }
 234}