Skip to content

Commit d85b888

Browse files
authored
328 solved. (#60)
1 parent 7a7d6a7 commit d85b888

File tree

4 files changed

+80
-0
lines changed

4 files changed

+80
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ continually updating 😃.
7070
* [203. Remove Linked List Elements](src/0203_remove_linked_list_elements/remove_linked_list_elements.go)
7171
* [206. Reverse Linked List](src/0206_reverse_linked_list/reverse_linked_list.go)
7272
* [237. Delete Node in a Linked List](src/0237_delete_node_in_a_linked_list/dniall.go)
73+
* [328. Odd Even Linked List](src/0328_odd_even_linked_list/odd_even_linked_list.go)
7374

7475
### Dynamic Programming
7576
* [62. Unique Paths](./src/0062_unique_paths/unique_paths.go)   *`array`*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
328. Odd Even Linked List
3+
https://leetcode.com/problems/odd-even-linked-list/
4+
5+
Given a singly linked list, group all odd nodes together followed by the even nodes.
6+
Please note here we are talking about the node number and not the value in the nodes.
7+
8+
You should try to do it in place.
9+
The program should run in O(1) space complexity and O(nodes) time complexity.
10+
11+
Note:
12+
The relative order inside both the even and odd groups should remain as it was in the input.
13+
The first node is considered odd, the second node even and so on ...
14+
*/
15+
// time: 2019-01-07
16+
17+
package oddevenlinkedlist
18+
19+
// ListNode Definition for singly-linked list.
20+
type ListNode struct {
21+
Val int
22+
Next *ListNode
23+
}
24+
25+
// time complexity: O(n)
26+
// space complexity: O(1)
27+
func oddEvenList(head *ListNode) *ListNode {
28+
if head == nil {
29+
return head
30+
}
31+
var (
32+
odd = head
33+
evenHead = head.Next
34+
even = evenHead
35+
)
36+
for even != nil && even.Next != nil {
37+
odd.Next = even.Next
38+
odd = odd.Next
39+
even.Next = odd.Next
40+
even = even.Next
41+
}
42+
odd.Next = evenHead
43+
return head
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package oddevenlinkedlist
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func createSinglyLinkedList(nums []int) *ListNode {
9+
head := &ListNode{}
10+
cur := head
11+
12+
for _, num := range nums {
13+
cur.Next = &ListNode{Val: num}
14+
cur = cur.Next
15+
}
16+
return head.Next
17+
}
18+
19+
func TestOddEvenList(t *testing.T) {
20+
testCases := []*ListNode{
21+
createSinglyLinkedList([]int{2, 1, 3, 5, 6, 4, 7}),
22+
nil,
23+
}
24+
expected := []*ListNode{
25+
createSinglyLinkedList([]int{2, 3, 6, 7, 1, 5, 4}),
26+
nil,
27+
}
28+
29+
for index, head := range testCases {
30+
if res := oddEvenList(head); !reflect.DeepEqual(res, expected[index]) {
31+
t.Errorf("expected %v, got %v", expected[index], res)
32+
}
33+
}
34+
}

src/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
|0283|[Move Zeroes(solution1)](./0283_move_zeroes/move_zeroes.go) <br/> [Move Zeroes(solution2)](./0283_move_zeroes/move_zeroes2.go)|Easy|*`array`*|
7979
|0300|[Longest Increasing Subsequence](./0300_longest_increasing_subsequence/lis.go)|Medium|*`dp`*|
8080
|0303|[303. Range Sum Query - Immutable](0303_range_sum_query/rsqim.go)|Easy||
81+
|0328|[328. Odd Even Linked List](0328_odd_even_linked_list/odd_even_linked_list.go)|Medium|*`singly linked list`*|
8182
|0343|[Integer Break](./0343_integer_break/integer_break.go)|Medium|*`recursion;`* *`memory search;`* *`dynamic programming`*|
8283
|0344|[344. Reverse String](0344_reverse_string/reverse_string.go)|Easy|*`double index`*|
8384
|0345|[345. Reverse Vowels of a String](0345_reverse_vowels_of_a_string/reverse_vowels.go)|Easy|*`double index`*|

0 commit comments

Comments
 (0)