-
Notifications
You must be signed in to change notification settings - Fork 391
/
Copy pathlinked_list.py
128 lines (105 loc) · 3.77 KB
/
linked_list.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Defines a node in the singly linked list
class Node:
def __init__(self, value, next_node = None):
self.value = value
self.next = next_node
# Defines the singly linked list
class LinkedList:
def __init__(self):
self.head = None # keep the head private. Not accessible outside this class
# returns the value in the first node
# returns None if the list is empty
# Time Complexity: ?
# Space Complexity: ?
def get_first(self):
pass
# method to add a new node with the specific data value in the linked list
# insert the new node at the beginning of the linked list
# Time Complexity: ?
# Space Complexity: ?
def add_first(self, value):
pass
# method to find if the linked list contains a node with specified value
# returns true if found, false otherwise
# Time Complexity: ?
# Space Complexity: ?
def search(self, value):
pass
# method that returns the length of the singly linked list
# Time Complexity: ?
# Space Complexity: ?
def length(self):
pass
# method that returns the value at a given index in the linked list
# index count starts at 0
# returns None if there are fewer nodes in the linked list than the index value
# Time Complexity: ?
# Space Complexity: ?
def get_at_index(self, index):
pass
# method that returns the value of the last node in the linked list
# returns None if the linked list is empty
# Time Complexity: ?
# Space Complexity: ?
def get_last(self):
pass
# method that inserts a given value as a new last node in the linked list
# Time Complexity: ?
# Space Complexity: ?
def add_last(self, value):
pass
# method to return the max value in the linked list
# returns the data value and not the node
def find_max(self):
pass
# method to delete the first node found with specified value
# Time Complexity: ?
# Space Complexity: ?
def delete(self, value):
pass
# method to print all the values in the linked list
# Time Complexity: ?
# Space Complexity: ?
def visit(self):
helper_list = []
current = self.head
while current:
helper_list.append(str(current.value))
current = current.next
print(", ".join(helper_list))
# method to reverse the singly linked list
# note: the nodes should be moved and not just the values in the nodes
# Time Complexity: ?
# Space Complexity: ?
def reverse(self):
pass
## Advanced/ Exercises
# returns the value at the middle element in the singly linked list
# Time Complexity: ?
# Space Complexity: ?
def find_middle_value(self):
pass
# find the nth node from the end and return its value
# assume indexing starts at 0 while counting to n
# Time Complexity: ?
# Space Complexity: ?
def find_nth_from_end(self, n):
pass
# checks if the linked list has a cycle. A cycle exists if any node in the
# linked list links to a node already visited.
# returns true if a cycle is found, false otherwise.
# Time Complexity: ?
# Space Complexity: ?
def has_cycle(self):
pass
# Helper method for tests
# Creates a cycle in the linked list for testing purposes
# Assumes the linked list has at least one node
def create_cycle(self):
if self.head == None:
return
# navigate to last node
current = self.head
while current.next != None:
current = current.next
current.next = self.head # make the last node link to first node