|
亲!马上注册或者登录会查看更多内容!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
问了背景 熟悉的语言,答Java,说可以用Java做题。然后问熟悉什么数据结构,答链表 树 hashmap什么的。。然后就出了俩链表题。。. Q0 f( G+ c- ^ P
" L6 H' I+ ]. b# Q7 Z: l3 E
1 Reversely print a Linked List
- ^9 l6 S- g2 e, g- ?递归做或Stack存下,说思路后,让任意挑一种实现# j7 Y$ J5 @! \6 g6 B5 E9 {
+ P& Y+ Y: V" o+ D
2 Swap Two Nodes in a Linked List, L2 D; ^9 d6 S$ g% x, o
给出要swap的两个nodes的index, 如pos1=1,pos2=3,
t3 Y& z/ j0 f5 p4 U6 A假设pos1 pos2 都是valid,且pos1< pos2。
2 I4 M1 C6 F1 X0 g) z0 K0 {4 U举例:链表开始时长这样: 0->1->2->3->4->5-null, : W7 b7 y0 H/ t9 T# j! e
swap后变成: 0->3 >2->1->4->5-null& n/ d/ i! G7 L
( n# x) A6 N- z8 X5 i# m
! l( B! p/ u2 ?# }corner case:
# B g$ g! T; ^& A6 K% @" a(1)表空 || 只有一个node || pos1=pos2: 不用swap, 直接返回* f, ]/ p/ c# p1 z0 E5 ?
(2)pos1=0 : 最开始时加个dummy node
2 c! I1 A* ?9 U7 \1 K! H$ |(3)pos1+1=pos2 : 直接swap这两个相邻的节点 5 {# M0 t. q7 N5 u) X
% h/ B2 P0 j Q8 p% |& L
/ j2 c( p l- U ]一般case:- n; J9 J& k$ J( |8 c
根据pos1和pos2, 遍历链表,找到这俩index所指示的node
. Q0 V: ]( @3 k: S8 m3 {弱弱地用了6个指针,分别指向pos1、pos2 的前面,当前和后面的节点,做swap。。
" w+ P! g& Q/ \
6 K$ e+ u; |* L8 q& J# y) U" y+ }! V$ t' J3 l4 x$ E' N
求解有没有更简洁的做法,或者少用点指针。。
2 G' e9 i' L4 B6 x% G' a1 Z3 b9 d
! U3 q6 [6 ]8 u1 S% |) S$ f面试时做得不好,估计跪了,o(︶︿︶)o ,伤心。。求积分。。/ m6 O; i& V; a6 K8 b9 n, u/ [
3 E* p7 G! @& e3 c
|
|