今天下午就要CCF考试了
在考试前还是想发一篇文章
祝愿大家保佑我
哈哈哈哈哈哈哈哈
最近忙着这个
导致学习没有节奏了
搞完了正好可以好好看书了
嗯,加油!!!
92-反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
思路:
关于链表的题目我之前说了挺多的,我最常用的套路就是:先将链表上节点的值保存至一数组中再做相应处理。本题亦是如此,步骤如下:
- 首先将head链表中各节点的值保存至head_list数组中
- 将head_list数组中[m-1:n]位置的数反转
- 最后将反转之后的head_list数组中元素赋值给新链表
代码如下:
class Solution(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""
head_copy = head
head_list = []
# 首先将head链表中各节点的值保存至head_list数组中
while head_copy:
head_list.append(head_copy.val)
head_copy = head_copy.next
# 直接将head_list数组中[m-1:n]位置的数反转
head_list[m-1:n] = head_list[m-1:n][::-1]
reverse_head = ListNode(0)
reverse_head_copy = reverse_head
# 最后将反转之后的head_list数组中元素赋值给新链表
for head_num in head_list:
reverse_head_copy.next = ListNode(head_num)
reverse_head_copy = reverse_head_copy.next
return reverse_head.next
if __name__ == "__main__":
head_list = [1, 2, 3, 4]
head = ListNode(0)
head_copy = head
for head_num in head_list:
head_copy.next = ListNode(head_num)
head_copy = head_copy.next
m = 1
n = 4
reverse_head = Solution().reverseBetween(head.next, m, n)
while reverse_head:
print(reverse_head.val)
reverse_head = reverse_head.next
print(reverse_head)
执行效率一般,在50%左右。