3 從尾到頭列印鍊錶

2021-10-01 08:59:31 字數 2477 閱讀 5329

題目描述

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個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 ...