Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create unordered list in python #336

Merged
merged 3 commits into from
Dec 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2230,8 +2230,8 @@ In order to achieve greater coverage and encourage more people to contribute to
</a>
</td>
<td> <!-- Python -->
<a href="./CONTRIBUTING.md">
<img align="center" height="25" src="./logos/github.svg" />
<a href="./src/python/unordered_linked_list.py">
<img align="center" height="25" src="./logos/python.svg" />
</a>
</td>
<td> <!-- Go -->
Expand Down
113 changes: 113 additions & 0 deletions src/python/unordered_linked_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
class Node:
def __init__(self, value, rptr=None) -> None:
self.value = value
self.rptr = rptr

@property
def get_value(self):
return self.value

@property
def next(self):
return self.rptr

@next.setter
def next(self, ptr):
self.rptr = ptr


class Unordered_Linked_List:
def __init__(self) -> None:
self.first_node = None

def insert(self, value):
# inserts a new node with the given value
if self.first_node is None:
self.first_node = Node(value)
else:
tmp = Node(value)
tmp.next = self.first_node
self.first_node = tmp

def find(self, value):
# returns true if the specified value is in your list
ptr = self.first_node
while ptr is not None:
if ptr.value == value:
print(f"{value} is in your list")
return True
else:
ptr = ptr.next

print(f"{value} is not in your list")
return False

def size(self): # returns size of the list
ptr = self.first_node
i = 0
while ptr is not None:
ptr = ptr.next
i += 1
print(f"Your list is of size {i}")
return i

def remove(self, value):
# removes all instances of a given value
ptr = self.first_node
prev = None
while ptr is not None:
if ptr.value == value:
if ptr == self.first_node:
tmp = ptr.next
self.first_node = tmp
else:
prev.next = ptr.next

prev = ptr
ptr = ptr.next

def show(self):
ptr = self.first_node
val = []
while ptr is not None:
val.append(ptr.get_value)
ptr = ptr.next

print(val)


def main():
list = Unordered_Linked_List()

list.insert(1)
list.insert(3)
list.insert(5)
list.insert(2)

list.size()
list.show()

list.find(3)
list.find(9)

list.remove(1)
list.remove(3)
list.remove(5)
list.remove(2)

list.show()

list.insert(1)
list.insert(3)
list.insert(5)
list.insert(3)

list.show()

list.remove(3)

list.show()


if __name__ == "__main__":
main()