单链表之反转链表:迭代式(Reverse a LinkList :iterative way)
一、问题描述
1、文字描述
有一个长度大于1的链表,具有属性elem和next,其中next为链表结点单元的引用域,elem为链表结点单元的值。链表头部是self._head,第一个结点引用域指向第二个结点,第二个结点指向下一个结点,以此类推,尾部指向null。希望能将此链表反转,即self.__head原最后一个结点指向原倒数第二个结点,原第二个结点指向原第一个结点,原第一个结点指向null。
2、图片描述
将黑色的链表情况转化为红色的链表情况
二、解决方案
1、元分析
可以通过问题描述看出,反转链表最简单的情况是链表中只有两个结点,所以在这里我们将两个结点抽出来做元分析。
为了使得分析具有一般通用性,我们更改一下变量,其中curr(current的缩写)为正在操作的结点,Prev(previous)为前一结点,NextN(NextNode)为下一个结点,为了不与属性next混淆
2、伪代码
- 将curr的下一个结点用NextN保存
- 下一个结点指向prev
- 在将curr移向下一个结点之前,将现在指向的结点用prev保存
- 将curr移向下一个结点
- 只要curr不是最后一个变量,则循环不停止
3、代码与实例
1.代码
def reverse_SingularLsitBegin(curr):
prev = None
while curr.next is not None:
NextN = curr.next
curr.next = pre
prev = curr#现在pre是第一个结点
curr = NextN
curr.next = prev
return curr
2.实例
mlist1.printall()
mlist1._head = reverse_SingularLsitBegin(mlist1._head)
mlist1.printall()
结果
三、联系方式
如果您对今天的反转链表的叙述方式或者解决方案有意见或者建议,欢迎与我联系!