双链表插入图解(单链表实现反转)

实现思路:

  1. 如果链表只有一个或者没有节点,则无需反转
  2. 原链表的第一个节点即为反转后的最后一个元素,需要将其固定,我们叫它final
  3. 按原链表的顺序从第二个开始对所有节点node进行遍历,每次将final的next重新指向node的next, 将node的next重新指向head的next,将head的next重新指向node (head:链表的头节点,不存放实际节点 next:某个节点的下一个节点)
  4. 遍历方法需要注意:其实是对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 is None: break else: node = node.next node.next = Node def show(self): node = self.head.next while node is not None: 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 not None: 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

双链表插入图解(单链表实现反转)(1)

双链表插入图解(单链表实现反转)(2)

双链表插入图解(单链表实现反转)(3)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页