题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
创建链表的两个基本方法:
- 头插法,新链表为原链表的逆序
- 尾插法,新链表与原链表顺序相同
本题使用给出的链表重建链表,从头到尾遍历原链表,注意访问三段范围的节点时要使用不同的插入方法将节点插入到新链表:
- 前m个节点使用尾插法
- 中间m至n个节点使用头插法
- n后面节点使用尾插法
注意使用头插法时要把新的头节点放到原来的链表尾部
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @param m int整型
# @param n int整型
# @return ListNode类
#
class Solution:
def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
# write code here
ans = ListNode(0)
tail, newHead, lastTail = ans, ans, ans
i = 1
while head:
tmp = head.next
if i <= m or i > n:
lastTail = tail
tail.next = head
tail, newHead = head, head
tail.next, newHead.next= None, None
else:
head.next = newHead
newHead = head
lastTail.next = newHead
head = tmp
i += 1
return ans.next