diff --git a/arai60/remove_duplicates_from_sorted_list_2/phase1.py b/arai60/remove_duplicates_from_sorted_list_2/phase1.py new file mode 100644 index 0000000..ae13d99 --- /dev/null +++ b/arai60/remove_duplicates_from_sorted_list_2/phase1.py @@ -0,0 +1,14 @@ +class Solution: + def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]: + dummy_head = ListNode(0) + current_head = dummy_head + skip_number = None + while head: + if head.next and head.val != head.next.val and head.val != skip_number: + current_head.next = ListNode(head.val) + current_head = current_head.next + elif head.next == None and head.val != skip_number: + current_head.next = ListNode(head.val) + skip_number = head.val + head = head.next + return dummy_head.next \ No newline at end of file diff --git a/arai60/remove_duplicates_from_sorted_list_2/phase2.py b/arai60/remove_duplicates_from_sorted_list_2/phase2.py new file mode 100644 index 0000000..eee82b8 --- /dev/null +++ b/arai60/remove_duplicates_from_sorted_list_2/phase2.py @@ -0,0 +1,25 @@ +""" +Reference: +fhiyoさん: https://github.com/fhiyo/leetcode/pull/4/files +nittocoさん: https://github.com/nittoco/leetcode/pull/9/files +TORUさん: https://github.com/TORUS0818/leetcode/pull/6/files +phase1の回答は, skip_numberという状態変数を持って条件を制御していくやりかただったが, 状態変数の扱いが難しいものになる恐れがあると考えた。 +あまり状態変数は持ちたくないものではあるので, 重複が見つかったらスキップというやり方を採用する。 +""" + +class Solution: + def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]: + def skip_duplicate_nodes(node): + while node.next and node.val == node.next.val: + node = node.next + return node + dummy_head = ListNode(-1) + current_node = dummy_head + while head: + if head.next and head.val == head.next.val: + head = skip_duplicate_nodes(head) + else: + current_node.next = ListNode(head.val) + current_node = current_node.next + head = head.next + return dummy_head.next \ No newline at end of file diff --git a/arai60/remove_duplicates_from_sorted_list_2/phase3.py b/arai60/remove_duplicates_from_sorted_list_2/phase3.py new file mode 100644 index 0000000..a561987 --- /dev/null +++ b/arai60/remove_duplicates_from_sorted_list_2/phase3.py @@ -0,0 +1,16 @@ +class Solution: + def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]: + def skip_duplicated_nodes(head: Optional[ListNode]) -> Optional[ListNode]: + while head.next and head.val == head.next.val: + head = head.next + return head + dummy_head = ListNode(-1) + current_node = dummy_head + while head: + if head.next and head.val == head.next.val: + head = skip_duplicated_nodes(head) + else: + current_node.next = ListNode(head.val) + current_node = current_node.next + head = head.next + return dummy_head.next \ No newline at end of file