一、题目描述
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii。
二、思路和代码
建立3个列表s1、s2和s3,s1和s3存储不需要变换的结点,s2存储需要变换的结点,最后将3个列表存储的值合并到一个链表里面。
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
if not head: return None
s1 = [] #存储m之前的数
s2 = [] #存储m-n之间的数
s3 = [] #存储n之后的数
for i in range(m-1):
n1 = head.val
s1.append(n1)
head = head.next
for j in range(m,n+1):
n2 = head.val
s2.append(n2)
head = head.next
while head:
n3 = head.val
s3.append(n3)
head = head.next
l1 = ListNode(0)
move = l1
s1_len = len(s1)
s2_len = len(s2)
s3_len = len(s3)
for i in range(s1_len):
move.next = ListNode(s1[i])
move = move.next
for j in range(s2_len-1,-1,-1): #利用for的规则反转
move.next = ListNode(s2[j])
move = move.next
for k in range(s3_len):
move.next = ListNode(s3[k])
move = move.next
return l1.next
总结
今天看了大佬们的代码,感觉差距挺大的,不过想想自己自学python差不多刚好2个月,就释怀了。(请记住这句话,以后我会经常用这个借口的。)
接下来说说大佬们给我眼前一亮的点。