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 @@ -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)

Expand Down
35 changes: 35 additions & 0 deletions src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs.go
Original file line number Diff line number Diff line change
@@ -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
}
24 changes: 24 additions & 0 deletions src/0024_swap_nodes_in_pairs/swap_nodes_in_pairs_test.go
Original file line number Diff line number Diff line change
@@ -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
}
1 change: 1 addition & 0 deletions src/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`*|
Expand Down