單鏈表之反轉(zhuǎn)鏈表:迭代式(Reverse a LinkList :iterative way)
一怠苔、問(wèn)題描述
1、文字描述
有一個(gè)長(zhǎng)度大于1的鏈表净薛,具有屬性elem和next谆奥,其中next為鏈表結(jié)點(diǎn)單元的引用域,elem為鏈表結(jié)點(diǎn)單元的值。鏈表頭部是self._head,第一個(gè)結(jié)點(diǎn)引用域指向第二個(gè)結(jié)點(diǎn),第二個(gè)結(jié)點(diǎn)指向下一個(gè)結(jié)點(diǎn)染簇,以此類推,尾部指向null强岸。希望能將此鏈表反轉(zhuǎn)锻弓,即self.__head原最后一個(gè)結(jié)點(diǎn)指向原倒數(shù)第二個(gè)結(jié)點(diǎn),原第二個(gè)結(jié)點(diǎn)指向原第一個(gè)結(jié)點(diǎn)蝌箍,原第一個(gè)結(jié)點(diǎn)指向null青灼。
2、圖片描述
將黑色的鏈表情況轉(zhuǎn)化為紅色的鏈表情況
二妓盲、解決方案
1杂拨、元分析
可以通過(guò)問(wèn)題描述看出,反轉(zhuǎn)鏈表最簡(jiǎn)單的情況是鏈表中只有兩個(gè)結(jié)點(diǎn)悯衬,所以在這里我們將兩個(gè)結(jié)點(diǎn)抽出來(lái)做元分析弹沽。
為了使得分析具有一般通用性,我們更改一下變量筋粗,其中curr(current的縮寫)為正在操作的結(jié)點(diǎn)策橘,Prev(previous)為前一結(jié)點(diǎn),NextN(NextNode)為下一個(gè)結(jié)點(diǎn)亏狰,為了不與屬性next混淆
2役纹、偽代碼
- 將curr的下一個(gè)結(jié)點(diǎn)用NextN保存
- 下一個(gè)結(jié)點(diǎn)指向prev
- 在將curr移向下一個(gè)結(jié)點(diǎn)之前,將現(xiàn)在指向的結(jié)點(diǎn)用prev保存
- 將curr移向下一個(gè)結(jié)點(diǎn)
- 只要curr不是最后一個(gè)變量暇唾,則循環(huán)不停止
3、代碼與實(shí)例
1.代碼
def reverse_SingularLsitBegin(curr):
prev = None
while curr.next is not None:
NextN = curr.next
curr.next = pre
prev = curr#現(xiàn)在pre是第一個(gè)結(jié)點(diǎn)
curr = NextN
curr.next = prev
return curr
2.實(shí)例
mlist1.printall()
mlist1._head = reverse_SingularLsitBegin(mlist1._head)
mlist1.printall()
結(jié)果
三、聯(lián)系方式
如果您對(duì)今天的反轉(zhuǎn)鏈表的敘述方式或者解決方案有意見(jiàn)或者建議策州,歡迎與我聯(lián)系瘸味!