diff --git a/README.md b/README.md index 034303c..bbdea15 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ continually updating 😃. * [19. Remove Nth Node From End of List](src/0019_remove_nth_node_from_end_of_list/remove_nth_node_from_end_of_list.go)   *`two pointers`* * [21. Merge Two Sorted Lists](./src/0021_merge_two_sorted_lists/mergeTwoLists.go) * [23. Merge k Sorted Lists](src/0023_merge_k_sorted_lists/mksl.go)   *`heap`* +* [24. Swap Nodes in Pairs](src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs.go) * [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) diff --git a/src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs.go b/src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs.go new file mode 100644 index 0000000..8b11c79 --- /dev/null +++ b/src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs.go @@ -0,0 +1,35 @@ +/* +24. Swap Nodes in Pairs +https://leetcode.com/problems/swap-nodes-in-pairs/ + +Given a linked list, swap every two adjacent nodes and return its head. +*/ +// time: 2019-01-02 + +package swapnodesinpairs + +// ListNode Definition for singly-linked list. +type ListNode struct { + Val int + Next *ListNode +} + +// time complexity: O(n/2), where n is len of linked list. +// space complexity: O(1) +func swapPairs(head *ListNode) *ListNode { + dummy := &ListNode{} + dummy.Next = head + cur := dummy + + for cur.Next != nil && cur.Next.Next != nil { + node1 := cur.Next + node2 := node1.Next + node3 := node2.Next + + node2.Next = node1 + node1.Next = node3 + cur.Next = node2 + cur = node1 + } + return dummy.Next +} diff --git a/src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs_test.go b/src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs_test.go new file mode 100644 index 0000000..3b8ced8 --- /dev/null +++ b/src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs_test.go @@ -0,0 +1,24 @@ +package swapnodesinpairs + +import ( + "reflect" + "testing" +) + +func TestSwapPairs(t *testing.T) { + head := createSingleList([]int{1, 2, 3, 4}) + expected := createSingleList([]int{2, 1, 4, 3}) + if res := swapPairs(head); !reflect.DeepEqual(res, expected) { + t.Errorf("expected %v, got %v", expected, res) + } +} + +func createSingleList(nums []int) *ListNode { + head := &ListNode{} + cur := head + for _, j := range nums { + cur.Next = &ListNode{Val: j} + cur = cur.Next + } + return head.Next +} diff --git a/src/README.md b/src/README.md index c187697..07f60d0 100644 --- a/src/README.md +++ b/src/README.md @@ -16,6 +16,7 @@ |0020|[Valid Parentheses](0020_valid_parentheses/valid_parentheses.go)|Easy|*`string;`* *`stack`*| |0021|[Merge Two Sorted Lists](0021_merge_two_sorted_lists/mergeTwoLists.go)|Easy|*`linked list`*| |0023|[23. Merge k Sorted Lists](0023_merge_k_sorted_lists/mksl.go)|Hard|*`linked list;`**`heap`*| +|0024|[24. Swap Nodes in Pairs](0024_swap_nodes_in_pairs/swap_nodes_in_pairs.go)|Medium|*`linked list`*| |0025|[Reverse Nodes in k-Group](./0025_reverse_nodes_in_k_group/reverse_node_k_group.go)|Hard|*`linked list`*| |0026|[Remove Duplicates from Sorted Array](0026_remove_duplicates_from_sorted_array/rdfsa.go)|Easy|*`array;`* *`double index`*| |0027|[Remove Element](0027_remove_element/remove_element.go)|Easy|*`array`*|