Skip to content

Commit 7868542

Browse files
authored
Create linked_list.py
1 parent 3c3ad5a commit 7868542

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

Sorting Algorithms/linked_list.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.next = None
5+
6+
class LinkedList:
7+
def __init__(self):
8+
self.head = None
9+
10+
def append(self, data):
11+
"""Append a node with the given data to the end of the list."""
12+
new_node = Node(data)
13+
if not self.head:
14+
self.head = new_node
15+
return
16+
last_node = self.head
17+
while last_node.next:
18+
last_node = last_node.next
19+
last_node.next = new_node
20+
21+
def prepend(self, data):
22+
"""Prepend a node with the given data to the start of the list."""
23+
new_node = Node(data)
24+
new_node.next = self.head
25+
self.head = new_node
26+
27+
def delete_with_value(self, data):
28+
"""Delete the first node containing the given data."""
29+
if not self.head:
30+
return
31+
32+
if self.head.data == data:
33+
self.head = self.head.next
34+
return
35+
36+
current_node = self.head
37+
while current_node.next and current_node.next.data != data:
38+
current_node = current_node.next
39+
40+
if current_node.next:
41+
current_node.next = current_node.next.next
42+
43+
def print_list(self):
44+
"""Print all elements in the linked list."""
45+
current_node = self.head
46+
while current_node:
47+
print(current_node.data, end=" -> ")
48+
current_node = current_node.next
49+
print("None")
50+
51+
def insert_after_node(self, prev_node, data):
52+
"""Insert a new node after the given node."""
53+
if not prev_node:
54+
print("The given previous node must in LinkedList.")
55+
return
56+
57+
new_node = Node(data)
58+
new_node.next = prev_node.next
59+
prev_node.next = new_node
60+
61+
def delete_at_position(self, position):
62+
"""Delete the node at a specific position."""
63+
if not self.head:
64+
return
65+
66+
temp = self.head
67+
68+
if position == 0:
69+
self.head = temp.next
70+
temp = None
71+
return
72+
73+
for i in range(position - 1):
74+
temp = temp.next
75+
if temp is None:
76+
break
77+
78+
if temp is None or temp.next is None:
79+
return
80+
81+
next = temp.next.next
82+
temp.next = None
83+
temp.next = next
84+
85+
def length(self):
86+
"""Return the length of the linked list."""
87+
count = 0
88+
current_node = self.head
89+
while current_node:
90+
count += 1
91+
current_node = current_node.next
92+
return count

0 commit comments

Comments
 (0)