Skip to content
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ continually updating 😃.
* [25. Reverse Nodes in k-Group](./src/0025_reverse_nodes_in_k_group/reverse_node_k_group.go)
* [61. Rotate List](./src/0061_rotate_list/rotate_list.go)
* [82. Remove Duplicates from Sorted List II](src/0082_remove_duplicates_from_sorted_list_2/rdfsl.go)
* [83. Remove Duplicates from Sorted List](src/0083_remove_duplicates_from_sorted_list/rdfsl.go)

### Dynamic Programming
* [62. Unique Paths](./src/0062_unique_paths/unique_paths.go)   *`array`*
Expand Down
38 changes: 38 additions & 0 deletions src/0083_remove_duplicates_from_sorted_list/rdfsl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
83. Remove Duplicates from Sorted List
https://leetcode.com/problems/remove-duplicates-from-sorted-list/

Given a sorted linked list, delete all duplicates such that each element appear only once.
*/

package rdfsl

// ListNode Definition for singly-linked list.
type ListNode struct {
Val int
Next *ListNode
}

// time complexity: O(n)
// space complexity: O(1)
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}

var (
pre = head
cur = head.Next
)

for cur != nil {
if cur.Val == pre.Val {
pre.Next = cur.Next
cur = cur.Next
} else {
pre = cur
cur = cur.Next
}
}
return head
}
35 changes: 35 additions & 0 deletions src/0083_remove_duplicates_from_sorted_list/rdfsl_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package rdfsl

import (
"reflect"
"testing"
)

func createSingleLinkedList(nums []int) *ListNode {
head := &ListNode{}
cur := head

for _, num := range nums {
cur.Next = &ListNode{Val: num}
cur = cur.Next
}
return head.Next
}

func TestDeleteDuplicates(t *testing.T) {
testCases := []*ListNode{
createSingleLinkedList([]int{1, 1, 2}),
createSingleLinkedList([]int{1, 1, 2, 3, 3}),
nil,
}
expected := []*ListNode{
createSingleLinkedList([]int{1, 2}),
createSingleLinkedList([]int{1, 2, 3}),
nil,
}
for index, head := range testCases {
if res := deleteDuplicates(head); !reflect.DeepEqual(res, expected[index]) {
t.Errorf("expected %v, got %v", expected[index], res)
}
}
}
1 change: 1 addition & 0 deletions src/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
|0079|[79. Word Search](0079_word_search/word_search.go)|Medium|*`backtracking;`**`array`*|
|0080|[80. Remove Duplicates from Sorted Array II](0080_remove_duplicates_from_sorted_array2/rdfsa2.go)|Medium|*`double index`*|
|0082|[82. Remove Duplicates from Sorted List II](0082_remove_duplicates_from_sorted_list_2/rdfsl.go)|Medium|*`linked list`*|
|0083|[83. Remove Duplicates from Sorted List](0083_remove_duplicates_from_sorted_list/rdfsl.go)|Easy|*`linked list`*|
|0088|[88. Merge Sorted Array](0088_merge_sorted_array/msa.go)|Easy|*`sort`*|
|0094|[Binary Tree Inorder Traversal](./0094_binary_tree_inorder_traversal/binary_tree_inorder_traversal.go)|Medium|*`binary tree`*|
|0100|[Same Tree](./0100_same_tree/same_tree.go)|Easy|*`binary tree`*|
Expand Down