打卡群刷题总结0802——反转链表 II

时间:2022-07-22
本文章向大家介绍打卡群刷题总结0802——反转链表 II,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目:92. 反转链表 II

链接:https://leetcode-cn.com/problems/reverse-linked-list-ii

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL

解题:

1、局部的链表反转。

难点:m和m-1位置上节点的处理。

方法:得找到第m-1个节点,在翻转m->n链表后,再修改m和m-1位置上节点指针。

代码:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseBetween(self, head, m, n):
        """
        :type head: ListNode
        :type m: int
        :type n: int
        :rtype: ListNode
        """
        # 增加头结点
        p = ListNode(0)
        p.next = head
        head = p
        p = head
        count = 1

        # 找到m-1
        while count < m:
            p = p.next
            count += 1
        # m->n链表翻转
        start_before = p
        p = p.next
        q, r = p.next, p.next
        while count < n:
            r = q.next
            q.next = p
            p = q
            q = r
            count += 1

        # m-1和m指针修改
        start_before.next.next = q
        start_before.next = p
        return head.next

PS:刷了打卡群的题,再刷另一道题,并且总结,确实耗费很多时间。如果时间不够,以后的更新会总结打卡群的题。

PPS:还是得日更呀,总结一下总是好的。