1、反转一个链表。循环算法。 1 List reverse(List l) {: o( d! R# L/ V$ |
2 if(!l) return l;
& P& l9 V" {2 \) |6 A 3 list cur = l.next;
8 f1 _. v9 u1 `) k 4 list pre = l;
1 l# ^! ~9 U( c: S 5 list tmp;
u$ D8 O, F- V+ w; r7 l' v 6 pre.next = null;1 D# v) x% o* ]3 H( G# X1 l
7 while ( cur ) {
- V- J8 D2 t" l: {) w1 U 8 tmp = cur;2 c% G3 i4 P' C- ^! c. j
9 cur = cur.next;
7 V% }$ d/ ]1 s5 ^5 A 10 tmp.next = pre4 s( A- V0 h6 K+ S* p# @2 R: Z3 |
11 pre = tmp;
: J; [! P, r& _; `& Q$ W 12 }8 O9 t$ Z! _" G9 }) I1 J& ~
13 return tmp;
! \# @5 }+ g, G 14 }
" K- p- k: r, W/ F 2、反转一个链表。递归算法。
9 ]: ]" m! v6 U" L% C% H, p# g 1 List resverse(list l) {5 G) Z& M2 y7 b6 Q( `3 e2 m$ ]! `' W
2 if(!l || !l.next) return l;
0 s( ^3 e" C3 t 3
7 f0 t- Q* M1 N$ H. }# D 4 List n = reverse(l.next);& O# k) G& |/ C: c5 V. n
5 l.next.next = l;4 C2 ~2 z/ }/ E7 N
6 l.next=null;# e3 x+ i1 c/ N+ x1 Y# M3 x L; |% k
7 }; ~. w! }5 c" R. |
8 return n;
8 `2 G6 L$ Q& y3 Q; [- T) ~+ D& o 9 }( u: `9 F/ ^. K' s
3、广度优先遍历二叉树。
; c' c$ x$ k: g2 Z( ?% |- w5 P' J 1 void BST(Tree t) {) l) m" z" Z, k* M8 n: m' j
2 Queue q = new Queue();
1 A# A0 L8 e3 N: B: r+ J- B' K 3 q.enque(t);$ l3 F# S6 p# t' X/ ?+ W0 A; ]
4 Tree t = q.deque();
! n" L2 v9 p6 E5 v: d: k% ]0 @ 5 while(t) {8 M; S( K* w1 @4 X
6 System.out.println(t.value);. D* c* g6 j6 A9 f$ M
7 q.enque(t.left);
8 M& Z! K! t& I/ p* Y3 b. r 8 q.enque(t.right);
" O7 e4 g4 F1 q 9 t = q.deque();# q* l8 }, d) ?' a6 u7 ^' f
10 }& ^1 `* [3 |& l# E2 `1 v8 b
11 }
( Y. F" K; Z/ L) n ----------------------3 T6 j6 U( u+ A+ q
1class Node {
4 ?- [- d. z/ d( E3 p C 2 Tree t;
7 l* N, O; a2 i, I 3 Node next;4 H: n6 ?. S2 g: s$ g3 S
4 }
9 u0 ^7 g! u/ `1 C! ^0 Z 5class Queue {% k/ l9 I$ C- V
6 Node head;
~+ s2 ^! z4 `, ~# G 7 Node tail;
, `& I9 H: g4 @ 8 public void enque(Tree t){+ X3 U8 C4 B1 M/ t6 ?6 }
9 Node n = new Node();
/ X) l4 p+ G- w* j6 x# j 10 n.t = t;
* `4 g, ^, k" a% x& i0 f, W 11 if(!tail){
7 e R1 n# _5 }) u0 D: Z 12 tail = head = n;0 e" t- L+ x* I4 g7 i0 a
13 } else {
- \8 o& c+ U' H. O2 X3 S! O5 E. { 14 tail.next = n;
4 {- x* g, u9 i! { 15 tail = n;
; [, w: V; t, { 16 }
, Y! g( Q2 {! E0 H& d5 g 17 }
* C) E# P0 d7 [% Y* o6 A$ N1 M 18 public Tree deque() {: b% H } r% x
19 if (!head) {
8 E% i% g, d9 U. W8 U* E 20 return null;
7 M$ M% s- J9 b! q! ] 21 } else {
2 w2 b" q0 D- ]4 |8 E 22 Node n = head;
7 B; L% W p2 s, K: w8 v# Y 23 head = head.next;
2 L8 w( b8 J+ A8 Q8 p7 ]* R 24 return n.t;% Y* [$ l/ [/ F) I+ R
25 }
3 {3 Z0 O) J4 }5 k: i: ? 26}
\- U, H3 g5 r4 `% ?$ B/ b 4、输出一个字符串所有排列。注意有重复字符。+ G8 }2 n# r0 u- y, }
1char[] p;
9 v" n7 p" o7 U5 w8 X2 [6 t 2void perm(char s[], int i, int n){
' B: v/ F, ?9 A9 s8 ?4 } 3 int j;' T( H+ ~- O4 S" u
4 char temp;
. b8 ?; `3 H6 }4 {4 c
* ]3 `! V( `+ w& N- h8 C 5 for(j=0;j |