Skip to content

Commit f32c043

Browse files
authored
Add DeleteFirst and DeleteLast to SinglyLinkedList (#450)
1 parent c9e2fa1 commit f32c043

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

DataStructures.Tests/LinkedList/LinkedListTests.cs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,71 @@ public static void RemoveItemsFromList()
106106
Assert.That(l3RemoveSucess, Is.False);
107107
Assert.That(nonExistantRemoveSucess, Is.False);
108108
}
109+
110+
[Test]
111+
public static void DeleteFirstFromList()
112+
{
113+
// Arrange
114+
var testObj = new SinglyLinkedList<string>();
115+
_ = testObj.AddLast("H");
116+
_ = testObj.AddLast("E");
117+
_ = testObj.AddLast("L");
118+
_ = testObj.AddLast("L");
119+
_ = testObj.AddLast("O");
120+
121+
// Act
122+
var deleteSuccess = testObj.DeleteFirst();
123+
124+
// Assert
125+
Assert.That(deleteSuccess, Is.True);
126+
Assert.That(4, Is.EqualTo(testObj.Length()));
127+
Assert.That("E", Is.EqualTo(testObj.GetElementByIndex(0)));
128+
}
129+
130+
[Test]
131+
public static void DeleteFirstFromEmptyList()
132+
{
133+
// Arrange
134+
var testObj = new SinglyLinkedList<string>();
135+
136+
// Act
137+
var deleteSuccess = testObj.DeleteFirst();
138+
139+
// Assert
140+
Assert.That(deleteSuccess, Is.False);
141+
}
142+
143+
[Test]
144+
public static void DeleteLastFromList()
145+
{
146+
// Arrange
147+
var testObj = new SinglyLinkedList<string>();
148+
_ = testObj.AddLast("H");
149+
_ = testObj.AddLast("E");
150+
_ = testObj.AddLast("L");
151+
_ = testObj.AddLast("L");
152+
_ = testObj.AddLast("O");
153+
154+
// Act
155+
var deleteSuccess = testObj.DeleteLast();
156+
157+
// Assert
158+
Assert.That(deleteSuccess, Is.True);
159+
Assert.That(4, Is.EqualTo(testObj.Length()));
160+
Assert.That("L", Is.EqualTo(testObj.GetElementByIndex(testObj.Length() - 1)));
161+
}
162+
163+
[Test]
164+
public static void DeleteLastFromEmptyList()
165+
{
166+
// Arrange
167+
var testObj = new SinglyLinkedList<string>();
168+
169+
// Act
170+
var deleteSuccess = testObj.DeleteLast();
171+
172+
// Assert
173+
Assert.That(deleteSuccess, Is.False);
174+
}
175+
109176
}

DataStructures/LinkedList/SinglyLinkedList/SinglyLinkedList.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,51 @@ public bool DeleteElement(T element)
153153

154154
return false;
155155
}
156+
157+
/// <summary>
158+
/// Deletes the first element of the list.
159+
/// </summary>
160+
/// <returns> true if the operation is successul.</returns>
161+
public bool DeleteFirst()
162+
{
163+
// checks if the List is empty
164+
if(Head is null)
165+
{
166+
return false;
167+
}
168+
169+
// if not, the head is overwritten with the next element and the old head is deleted
170+
Head = Head.Next;
171+
return true;
172+
}
173+
174+
/// <summary>
175+
/// Deletes the last element of the list.
176+
/// </summary>
177+
/// <returns> returns true if the operation is successful. </returns>
178+
public bool DeleteLast()
179+
{
180+
// checks if the List is empty
181+
if(Head is null)
182+
{
183+
return false;
184+
}
185+
186+
// checks if the List has only one element
187+
if(Head.Next is null)
188+
{
189+
Head = null;
190+
return true;
191+
}
192+
193+
// if not, iterates through the list to the second last element and deletes the last one
194+
SinglyLinkedListNode<T>? secondlast = Head;
195+
while(secondlast.Next?.Next is not null)
196+
{
197+
secondlast = secondlast.Next;
198+
}
199+
200+
secondlast.Next = null;
201+
return true;
202+
}
156203
}

0 commit comments

Comments
 (0)