leetcode_92. 反转链表 II

举报
悲恋花丶无心之人 发表于 2021/02/06 00:22:10 2021/02/06
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1-&gt...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

二、解题思路

leetcode_206. 反转链表不同的是起始位置结束位置的确定,那么需要额外记录反转链表区域前的节点和反转链表区域后的节点位置,然后反转链表,最后连接之前存储的区域前和区域后的节点即可。

三、代码


  
  1. # 2020-10-23
  2. # Definition for singly-linked list.
  3. class ListNode:
  4. def __init__(self, x):
  5. self.val = x
  6. self.next = None
  7. def __repr__(self):
  8. return str(self.val)
  9. class Solution:
  10. def reverseBetween(self, head, m, n):
  11. """
  12. :type head: ListNode
  13. :type m: int
  14. :type n: int
  15. :rtype: ListNode
  16. """
  17. # 1 --> 2 --> 3 --> 4 --> 5 --> null m = 2, n = 4
  18. # 1 --> 4 --> 3 --> 2 --> 5 --> null
  19. # pre:1 post:5 h:2 t:4
  20. # reverseList:反转链表
  21. dummy = ListNode(None)
  22. dummy.next = head
  23. before_reverse_start = dummy
  24. for _ in range(m - 1):
  25. before_reverse_start = before_reverse_start.next
  26. reverse_head = before_reverse_start.next
  27. end = reverse_head
  28. for _ in range(n - m):
  29. end = end.next
  30. reversed_list_next = end.next
  31. end.next = None
  32. def reverseList(head):
  33. if not head:
  34. return None
  35. cur, cur_new_next = head, None
  36. while cur:
  37. # save original next node
  38. origin_next = cur.next
  39. # link new next node
  40. cur.next = cur_new_next
  41. # current node turns to new next node
  42. cur_new_next = cur
  43. # original next node turns to current node
  44. cur = origin_next
  45. return cur_new_next
  46. before_reverse_start.next = reverseList(reverse_head)
  47. reverse_head.next = reversed_list_next
  48. return dummy.next
  49. if __name__ == '__main__':
  50. head = ListNode(1)
  51. head.next = ListNode(2)
  52. head.next.next = ListNode(3)
  53. head.next.next.next = ListNode(4)
  54. head.next.next.next.next = ListNode(5)
  55. m, n = 2, 4
  56. s = Solution()
  57. ans = s.reverseBetween(head, m, n)
  58. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/110227244

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。