92. 反转链表 II
题目
反转从位置 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路
1>源代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
beforehead = ListNode(-1)
beforehead.next = head
prev=beforehead
cur = head
while left>1:
cur = cur.next
prev = prev.next
left -= 1
right -= 1
tail, newhead = cur, prev
while right:
nex = cur.next
cur.next = prev
prev = cur
cur = nex
right -= 1
newhead.next = prev
tail.next = cur
return beforehead.next
2>算法介绍
本题和反转列表I的区别在于,题目给定了要求你反转的部分链表。总体思路和反转链表相同,但在反转之前需要根据题目给出的要求,找到需要反转的部分链表。
与此同时,由于为反转部分链表,所以需要记录下这段子链表的前一个节点和尾部节点,以在反转链表后重新链接链表。