Skip to content

create remove_duplicates.py #9330

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

Closed
wants to merge 4 commits into from
Closed
Changes from 2 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
145 changes: 145 additions & 0 deletions data_structures/linked_list/remove_duplicates.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
from typing import List, Optional


class Node:
def __init__(self, data: int):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __init__. If the function does not return a value, please provide the type hint as: def function() -> None:

self.data = data
self.next = None


def create(A: List[int]) -> Optional[Node]:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide descriptive name for the parameter: A

"""
Create a linked list from an array.

Args:
A (List[int]): The input array.

Returns:
Optional[Node]: The head of the linked list.

Example:
>>> A = [1, 3, 5, 7, 9, 11, 11, 15, 17, 19]
>>> head = create(A)
>>> display(head)
1 3 5 7 9 11 15 17 19
"""
if not A:
return None

head = Node(A[0])
last = head

for data in A[1:]:
last.next = Node(data)
last = last.next

return head


def display(head: Optional[Node]) -> None:
"""
Display the elements of a linked list.

Args:
head (Optional[Node]): The head of the linked list.

Example:
>>> A = [1, 3, 5, 7, 9, 11, 11, 15, 17, 19]
>>> head = create(A)
>>> display(head)
1 3 5 7 9 11 11 15 17 19
"""
while head:
print(head.data, end=" ")
head = head.next
print()


def count(head: Optional[Node]) -> int:
"""
Count the number of nodes in a linked list.

Args:
head (Optional[Node]): The head of the linked list.

Returns:
int: The count of nodes.

Example:
>>> A = [1, 3, 5, 7, 9, 11, 11, 15, 17, 19]
>>> head = create(A)
>>> count(head)
10
"""
count = 0
while head:
count += 1
head = head.next
return count


def delete(head: Optional[Node], index: int) -> int:
"""
Delete a node at a given index from a linked list.

Args:
head (Optional[Node]): The head of the linked list.
index (int): The index at which the node should be deleted (1-based index).

Returns:
int: The data of the deleted node, or -1 if the index is out of range.

Example:
>>> A = [1, 3, 5, 7, 9, 11, 11, 15, 17, 19]
>>> head = create(A)
>>> delete(head, 3)
5
"""
if index < 1 or index > count(head):
return -1

if index == 1:
data = head.data
head = head.next
return data
else:
prev = head
current = head
for _ in range(index - 1):
prev = current
current = current.next
data = current.data
prev.next = current.next
return data


def remove_duplicates(head: Optional[Node]) -> None:
"""
Remove duplicate elements from a sorted linked list.

Args:
head (Optional[Node]): The head of the linked list.

Example:
>>> A = [1, 3, 3, 5, 5, 7, 7, 9]
>>> head = create(A)
>>> remove_duplicates(head)
>>> display(head)
1 3 5 7 9
"""
current = head
while current and current.next:
if current.data == current.next.data:
current.next = current.next.next
else:
current = current.next


if __name__ == "__main__":
print("Linked List!")

A = [1, 3, 5, 7, 9, 11, 11, 15, 17, 19]
head = create(A)

remove_duplicates(head)
display(head)