-
Notifications
You must be signed in to change notification settings - Fork 1
/
5_22.rb
77 lines (59 loc) · 1.46 KB
/
5_22.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Definition for singly-linked list.
# class ListNode
# attr_accessor :val, :next
# def initialize(val)
# @val = val
# @next = nil
# end
# end
# @param {ListNode} head
# @return {ListNode}
def detectCycle(head)
nodes = {}
current = head
idx=0
while current
if nodes[current.next]
return nodes[current.next]
end
nodes[current]=idx
idx+=1
current = current.next
end
-1
end
# Definition for singly-linked list.
# class ListNode
# attr_accessor :val, :next
# def initialize(val = 0, _next = nil)
# @val = val
# @next = _next
# end
# end
# @param {ListNode} head
# @return {ListNode}
# reorder given list such that odds are grouped first, and the even nodes at the end
# idea, save even values to an array & add on at the end
# first answer, assuming head is odd
def odd_even_list(head)
idx=0
current=head
even_vals=[]
while current
break unless current.next
if current.next.val.odd?
current=current.next
else
even_vals << current.next
#continue looping until hit odd val
end
current = current.next
end
#add even numbers at the end
while even_vals
node = ListNode.new(even_vals.shift)
current.next = node
current = node
end
head
end