題目描述
輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。
1)遞迴
python:
# -*- coding:utf-8 -*-
class
listnode
:def
__init__
(self, x)
: self.val = x
self.
next
=none
# 遞迴
class
solution
:# 返回從尾部到頭部的列表值序列,例如[1,2,3]
defprintlistfromtailtohead
(self, listnode)
:if listnode is
none
:return
else
:return self.printlistfromtailtohead(listnode.
next)+
[listnode.val]
if __name__ ==
'__main__'
: s = solution(
) l =
list
(map
(int
,input()
.strip(
).split())
) listnode = listnode(l[0]
) cur = listnode
for i in
range(1
,len
(l))
: cur.
next
= listnode(l[i]
) cur = cur.
next
cur.
next
=none
print
(s.printlistfromtailtohead(listnode)
)
c++:
// 遞迴
class
solution
res.
push_back
(head-
>val);}
return res;}}
;
2)棧的思想
python:
class
solution
:# 返回從尾部到頭部的列表值序列,例如[1,2,3]
defprintlistfromtailtohead
(self, listnode)
:if listnode is
none
:return
else
: stack =
res =
while listnode is
notnone
: listnode = listnode.
next
while
len(stack)
>0:
))return res
c++:
// 棧
class
solution
while
(!stk.
empty()
)return res;}}
;
3)陣列反轉
python:
# 陣列反轉
class
solution
:# 返回從尾部到頭部的列表值序列,例如[1,2,3]
defprintlistfromtailtohead
(self, listnode)
:if listnode is
none
:return
else
: res =
while listnode:
listnode = listnode.
next
i, j =0,
len(res)-1
while i < j:
res[i]
, res[j]
= res[j]
, res[i]
i +=
1 j -=
1return res
c++:
//陣列反轉
class
solution
int temp =0;
int i=
0,j=res.
size()
-1;// 陣列反轉
while
(ireturn res;}}
;
3 從尾到頭列印鍊錶
輸入乙個鍊錶的頭結點head,從尾到頭列印鍊錶的每乙個節點。注意是從尾到頭列印鍊錶節點。因此本題有兩個解法,分別用棧和遞迴來實現。但是請注意,在用遞迴實現的時候,當鍊表長度很長時候,容易導數函式呼叫多層棧的溢位。因此,推薦使用顯式用棧的方式,其魯棒性會更好一點。劍指offer的觀點 1 利用棧,先進...
3 從尾到頭列印鍊錶
題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個結點的值。思路 借助棧,先進後出,從頭到尾將結點指標壓入棧,然後再依次將棧頂結點的值放入vector中,pop。struct listnode class solution while stack.empty return value struct lis...
3 從尾到頭列印鍊錶
輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。總結 1 要首先考慮可不可以將鍊錶發生改變,如果可以,翻轉鍊錶,輸出 不可以,利用棧的特性 2 若逆序翻轉鍊錶,不用建立乙個首結點,只用用乙個指標指向null。3 逆序翻轉鍊錶將原始的head指向newhead寫法 head next ...