File tree 3 files changed +169
-0
lines changed
solution/0200-0299/0281.Zigzag Iterator
3 files changed +169
-0
lines changed Original file line number Diff line number Diff line change @@ -74,6 +74,64 @@ class ZigzagIterator:
74
74
# while i.hasNext(): v.append(i.next())
75
75
```
76
76
77
+ ### ** Rust**
78
+
79
+ ``` rust
80
+ struct ZigzagIterator {
81
+ v1 : Vec <i32 >,
82
+ v2 : Vec <i32 >,
83
+ /// `false` represents `v1`, `true` represents `v2`
84
+ flag : bool ,
85
+ }
86
+
87
+ impl ZigzagIterator {
88
+ fn new (v1 : Vec <i32 >, v2 : Vec <i32 >) -> Self {
89
+ Self {
90
+ v1 ,
91
+ v2 ,
92
+ // Initially beginning with `v1`
93
+ flag : false ,
94
+ }
95
+ }
96
+
97
+ fn next (& mut self ) -> i32 {
98
+ if ! self . flag {
99
+ // v1
100
+ if self . v1. is_empty () && ! self . v2. is_empty () {
101
+ self . flag = true ;
102
+ let ret = self . v2. remove (0 );
103
+ return ret ;
104
+ }
105
+ if self . v2. is_empty () {
106
+ let ret = self . v1. remove (0 );
107
+ return ret ;
108
+ }
109
+ let ret = self . v1. remove (0 );
110
+ self . flag = true ;
111
+ return ret ;
112
+ } else {
113
+ // v2
114
+ if self . v2. is_empty () && ! self . v1. is_empty () {
115
+ self . flag = false ;
116
+ let ret = self . v1. remove (0 );
117
+ return ret ;
118
+ }
119
+ if self . v1. is_empty () {
120
+ let ret = self . v2. remove (0 );
121
+ return ret ;
122
+ }
123
+ let ret = self . v2. remove (0 );
124
+ self . flag = false ;
125
+ return ret ;
126
+ }
127
+ }
128
+
129
+ fn has_next (& self ) -> bool {
130
+ ! self . v1. is_empty () || ! self . v2. is_empty ()
131
+ }
132
+ }
133
+ ```
134
+
77
135
### ** Java**
78
136
79
137
<!-- 这里可写当前语言的特殊实现逻辑 -->
Original file line number Diff line number Diff line change @@ -96,6 +96,64 @@ class ZigzagIterator:
96
96
# while i.hasNext(): v.append(i.next())
97
97
```
98
98
99
+ ### ** Rust**
100
+
101
+ ``` rust
102
+ struct ZigzagIterator {
103
+ v1 : Vec <i32 >,
104
+ v2 : Vec <i32 >,
105
+ /// `false` represents `v1`, `true` represents `v2`
106
+ flag : bool ,
107
+ }
108
+
109
+ impl ZigzagIterator {
110
+ fn new (v1 : Vec <i32 >, v2 : Vec <i32 >) -> Self {
111
+ Self {
112
+ v1 ,
113
+ v2 ,
114
+ // Initially beginning with `v1`
115
+ flag : false ,
116
+ }
117
+ }
118
+
119
+ fn next (& mut self ) -> i32 {
120
+ if ! self . flag {
121
+ // v1
122
+ if self . v1. is_empty () && ! self . v2. is_empty () {
123
+ self . flag = true ;
124
+ let ret = self . v2. remove (0 );
125
+ return ret ;
126
+ }
127
+ if self . v2. is_empty () {
128
+ let ret = self . v1. remove (0 );
129
+ return ret ;
130
+ }
131
+ let ret = self . v1. remove (0 );
132
+ self . flag = true ;
133
+ return ret ;
134
+ } else {
135
+ // v2
136
+ if self . v2. is_empty () && ! self . v1. is_empty () {
137
+ self . flag = false ;
138
+ let ret = self . v1. remove (0 );
139
+ return ret ;
140
+ }
141
+ if self . v1. is_empty () {
142
+ let ret = self . v2. remove (0 );
143
+ return ret ;
144
+ }
145
+ let ret = self . v2. remove (0 );
146
+ self . flag = false ;
147
+ return ret ;
148
+ }
149
+ }
150
+
151
+ fn has_next (& self ) -> bool {
152
+ ! self . v1. is_empty () || ! self . v2. is_empty ()
153
+ }
154
+ }
155
+ ```
156
+
99
157
### ** Java**
100
158
101
159
``` java
Original file line number Diff line number Diff line change
1
+ struct ZigzagIterator {
2
+ v1 : Vec < i32 > ,
3
+ v2 : Vec < i32 > ,
4
+ /// `false` represents `v1`, `true` represents `v2`
5
+ flag : bool ,
6
+ }
7
+
8
+ impl ZigzagIterator {
9
+ fn new ( v1 : Vec < i32 > , v2 : Vec < i32 > ) -> Self {
10
+ Self {
11
+ v1,
12
+ v2,
13
+ // Initially beginning with `v1`
14
+ flag : false ,
15
+ }
16
+ }
17
+
18
+ fn next ( & mut self ) -> i32 {
19
+ if !self . flag {
20
+ // v1
21
+ if self . v1 . is_empty ( ) && !self . v2 . is_empty ( ) {
22
+ self . flag = true ;
23
+ let ret = self . v2 . remove ( 0 ) ;
24
+ return ret;
25
+ }
26
+ if self . v2 . is_empty ( ) {
27
+ let ret = self . v1 . remove ( 0 ) ;
28
+ return ret;
29
+ }
30
+ let ret = self . v1 . remove ( 0 ) ;
31
+ self . flag = true ;
32
+ return ret;
33
+ } else {
34
+ // v2
35
+ if self . v2 . is_empty ( ) && !self . v1 . is_empty ( ) {
36
+ self . flag = false ;
37
+ let ret = self . v1 . remove ( 0 ) ;
38
+ return ret;
39
+ }
40
+ if self . v1 . is_empty ( ) {
41
+ let ret = self . v2 . remove ( 0 ) ;
42
+ return ret;
43
+ }
44
+ let ret = self . v2 . remove ( 0 ) ;
45
+ self . flag = false ;
46
+ return ret;
47
+ }
48
+ }
49
+
50
+ fn has_next ( & self ) -> bool {
51
+ !self . v1 . is_empty ( ) || !self . v2 . is_empty ( )
52
+ }
53
+ }
You can’t perform that action at this time.
0 commit comments