反转链表

单链表之反转链表:迭代式(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()

结果

反转之前与反转之后的链表值

三、联系方式

如果您对今天的反转链表的叙述方式或者解决方案有意见或者建议,欢迎与我联系!

邮箱:[email protected]

备用:[email protected]

你可能感兴趣的:(反转链表)