如果鍊錶只有乙個或者沒有節點,則無需反轉
原鍊錶的第乙個節點即為反轉後的最後乙個元素,需要將其固定,我們叫它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...