当前位置:Gxlcms > Python > Python数据结构之翻转链表

Python数据结构之翻转链表

时间:2021-07-01 10:21:17 帮助过:60人阅读

翻转一个链表

样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

一种比较简单的方法是用“摘除法”。就是先新建一个空节点,然后遍历整个链表,依次令遍历到的节点指向新建链表的头节点。

那样例来说,步骤是这样的:

1. 新建空节点:None
2. 1->None
3. 2->1->None
4. 3->2->1->None

代码就非常简单了:

  1. """
  2. Definition of ListNode
  3. class ListNode(object):
  4. def __init__(self, val, next=None):
  5. self.val = val
  6. self.next = next
  7. """
  8. class Solution:
  9. """
  10. @param head: The first node of the linked list.
  11. @return: You should return the head of the reversed linked list.
  12. Reverse it in-place.
  13. """
  14. def reverse(self, head):
  15. temp = None
  16. while head:
  17. cur = head.next
  18. head.next = temp
  19. temp = head
  20. head = cur
  21. return temp
  22. # write your code here

当然,还有一种稍微难度大一点的解法。我们可以对链表中节点依次摘链和链接的方法写出原地翻转的代码:

  1. """
  2. Definition of ListNode
  3. class ListNode(object):
  4. def __init__(self, val, next=None):
  5. self.val = val
  6. self.next = next
  7. """
  8. class Solution:
  9. """
  10. @param head: The first node of the linked list.
  11. @return: You should return the head of the reversed linked list.
  12. Reverse it in-place.
  13. """
  14. def reverse(self, head):
  15. if head is None:
  16. return head
  17. dummy = ListNode(-1)
  18. dummy.next = head
  19. pre, cur = head, head.next
  20. while cur:
  21. temp = cur
  22. # 把摘链的地方连起来
  23. pre.next = cur.next
  24. cur = pre.next
  25. temp.next = dummy.next
  26. dummy.next = temp
  27. return dummy.next
  28. # write your code here

需要注意的是,做摘链的时候,不要忘了把摘除的地方再连起来

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多Python数据结构之翻转链表相关文章请关注PHP中文网!

人气教程排行