基于Python实现单向链表的反转
2019-05-28 12:29
429 查看
循环方法
循环方法的思想是建立三个变量,分别指向当前结点,当前结点的前一个结点,新的head结点,从head开始,每次循环将相邻两个结点的方向反转。当整个链表循环遍历过一遍之后,链表的方向就被反转过来了。
class ListNode: def __init__(self, x): self.val = x self.next = None def reverse(head): # 循环的方法反转链表 if head is None or head.next is None: return head # 定义反转的初始状态 pre = None cur = head newhead = head while cur: newhead = cur tmp = cur.next cur.next = pre pre = cur cur = tmp return newhead if __name__ == '__main__': head = ListNode(1) # 测试代码 p1 = ListNode(2) # 建立链表1->2->3->4->None; p2 = ListNode(3) p3 = ListNode(4) head.next = p1 p1.next = p2 p2.next = p3 p = reverse(head) # 输出链表 4->3->2->1->None while p: print(p.val) p = p.next
递归方法
根据递归的概念,我们只需要关注递归的基例条件,也就是递归的出口或递归的终止条件,以及长度为n的链表与长度为n-1的链表的关系即可
长度为n的链表的反转结果,只需要将长度为n-1的链表反转后,将链表最后指向None修改为指向长度为n的链表的head,并让head指向None(或者说在链表与None之间添加长度为n的链表的head结点)
即反转长度为n的链表,首先反转n-1链表,然后再操作反转好的链表与head结点的关系;至于n-1长度的链表怎么反转,只需要把它再拆分成node1和n-2的链表…
class ListNode: def __init__(self, x): self.val = x self.next = None def reverse(head, newhead): # 递归,head为原链表的头结点,newhead为反转后链表的头结点 if head is None: return if head.next is None: newhead = head else: newhead = reverse(head.next, newhead) head.next.next = head head.next = None return newhead if __name__ == '__main__': head = ListNode(1) # 测试代码 p1 = ListNode(2) # 建立链表1->2->3->4->None p2 = ListNode(3) p3 = ListNode(4) head.next = p1 p1.next = p2 p2.next = p3 newhead = None p = reverse(head, newhead) # 输出链表4->3->2->1->None while p: print(p.val) p = p.next
相关文章推荐
- 基于Python单向循环链表实现尾部、任意位置添加,删除
- python实现反转部分单向链表
- 单向链表python实现,增删改查+链表反转
- 基于Python单向链表实现尾部、任意位置添加,删除
- python实现单向链表
- Python实现的单向循环链表功能示例
- Python中的链表之单向链表实现栈和队列
- 【转】Python实现单向链表(图解)
- python实现单向链表
- 请用递归法实现单向链表的反转,即头结点指向尾结点,尾结点指向头结点
- 【LeetCode】Python实现-206. 反转链表(三种方法)
- python中使用递归实现反转链表
- 反转单向链表 (java 语言实现)
- C递归实现单向链表的反转
- 反转部分单向链表 Python 版
- 单链表之python实现学习笔记及环形链表-反转链表
- python单向链表的代码实现
- python实现单向链表
- python实现反向打印单向链表的两种方法
- Python 实现有序单向链表