Skip to content

Commit 9026e0b

Browse files
authored
feat: add rust solution to lcof problem: No.09 (doocs#669)
面试题 09. 用两个栈实现队列
1 parent 772fa18 commit 9026e0b

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

lcof/面试题09. 用两个栈实现队列/README.md

+47
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,53 @@ class CQueue {
244244
*/
245245
```
246246

247+
### **Rust**
248+
249+
```rust
250+
struct CQueue {
251+
s1: Vec<i32>,
252+
s2: Vec<i32>
253+
}
254+
255+
256+
/**
257+
* `&self` means the method takes an immutable reference.
258+
* If you need a mutable reference, change it to `&mut self` instead.
259+
*/
260+
impl CQueue {
261+
262+
fn new() -> Self {
263+
CQueue {
264+
s1: Vec::new(),
265+
s2: Vec::new(),
266+
}
267+
}
268+
269+
fn append_tail(&mut self, value: i32) {
270+
self.s1.push(value);
271+
}
272+
273+
fn delete_head(&mut self) -> i32 {
274+
match self.s2.pop() {
275+
Some(value) => value,
276+
None => {
277+
while !self.s1.is_empty() {
278+
self.s2.push(self.s1.pop().unwrap());
279+
}
280+
self.s2.pop().unwrap_or(-1)
281+
}
282+
}
283+
}
284+
}
285+
286+
/**
287+
* Your CQueue object will be instantiated and called as such:
288+
* let obj = CQueue::new();
289+
* obj.append_tail(value);
290+
* let ret_2: i32 = obj.delete_head();
291+
*/
292+
```
293+
247294
### **...**
248295

249296
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
struct CQueue {
2+
s1: Vec<i32>,
3+
s2: Vec<i32>
4+
}
5+
6+
7+
/**
8+
* `&self` means the method takes an immutable reference.
9+
* If you need a mutable reference, change it to `&mut self` instead.
10+
*/
11+
impl CQueue {
12+
13+
fn new() -> Self {
14+
CQueue {
15+
s1: Vec::new(),
16+
s2: Vec::new(),
17+
}
18+
}
19+
20+
fn append_tail(&mut self, value: i32) {
21+
self.s1.push(value);
22+
}
23+
24+
fn delete_head(&mut self) -> i32 {
25+
match self.s2.pop() {
26+
Some(value) => value,
27+
None => {
28+
while !self.s1.is_empty() {
29+
self.s2.push(self.s1.pop().unwrap());
30+
}
31+
self.s2.pop().unwrap_or(-1)
32+
}
33+
}
34+
}
35+
}
36+
37+
/**
38+
* Your CQueue object will be instantiated and called as such:
39+
* let obj = CQueue::new();
40+
* obj.append_tail(value);
41+
* let ret_2: i32 = obj.delete_head();
42+
*/

0 commit comments

Comments
 (0)