資料結構 單鏈表實現反轉

2021-09-25 00:21:12 字數 1931 閱讀 3095

如果鍊錶只有乙個或者沒有節點,則無需反轉

原鍊錶的第乙個節點即為反轉後的最後乙個元素,需要將其固定,我們叫它final

按原鍊錶的順序從第二個開始對所有節點node進行遍歷,每次將final的next重新指向node的next,

將node的next重新指向head的next,將head的next重新指向node

(head:鍊錶的頭節點,不存放實際節點

next:某個節點的下乙個節點)

遍歷方法需要注意:其實是對final的next進行遍歷,直到為none

首先,我們新建乙個node類,也就是鍊錶上的節點;

然後,再建立乙個linkedlist類,也就是乙個單鏈錶類。裡面包含了新增節點的add方法和列印整個鍊錶的show方法

class

node

:def

__init__

(self, i)

: self.

id= i

self.

next

=none

class

linkedlist

:def

__init__

(self)

: self.head = node(-1

)def

add(self, node)

: node = self.head

while

true

:if node.

next

isnone

:break

else

: node = node.

next

node.

next

= node

defshow

(self)

: node = self.head.

next

while node is

notnone

:print

('node: '

+str

(node.id)

) node = node.

next

我們建立乙個鍊錶物件,加入3個節點,如下:

lk = linkedlist()

lk.add(node(1))

lk.add(node(2))

lk.add(node(3))

lk.show()

node: 1

node: 2

node: 3

最後,就是我們實現鍊錶反轉的方法,也是類方法。

def

reverse

(self)

: final = self.head.

next

temp = final.

next

if(final is

none)|

(temp is

none):

return

while temp is

notnone

: final.

next

= temp.

next

temp.

next

= self.head.

next

self.head.

next

= temp

temp = final.

next

驗證一下,我們的反轉方法,結果沒有問題,就是我們想要的結果。

lk.reverse()

lk.show()

node: 3

node: 2

node: 1

資料結構 單鏈表反轉

鍊錶反轉一般有兩種解法 遞迴和迭代。首先給出鍊錶的定義 typedef struct taglnode linklist 假設鍊錶為head 1 2 3 4 5 null。linklist reverse linklist head 一開始我的想法是,先遞迴到最後一層,也就是reverse 5 這層...

資料結構中 實現單鏈表的反轉

1.實現單鏈表的反轉 public void reverselist heronode head heronode reservehead new heronode 0,heronode next null heronode cur head.next while cur null 將head替換r...

資料結構之單鏈表反轉

單鏈表反轉的非遞迴方法 首先是結點的定義 public class node 使用非遞迴方法反轉單鏈表,需要設定兩個node型別的物件pre和nex,pre用來記錄head的前乙個結點,nex用來記錄head的後乙個結點,然後講head結點後移。public node reversecur node...