92.反转链表Ⅱ

难度:中等
题目描述:
92.反转链表Ⅱ_第1张图片
思路总结:前几天做过一个206.反转链表,是个简单题,是整个链表的反转,这里是部分链表的翻转,因此需要增加一个while循环先让指针到达指定位置,然后再使用con和tail指针来记录m位置前一个节点和反转链表的最后一个节点。
题解一:

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

class Solution:
    def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
        if not head:
            return None
        pre, cur = None, head
        while m > 1:
            pre = cur
            cur = cur.next
            m -= 1
            n -= 1
        con, tail = pre, cur
        while n:
            tmp = cur.next
            cur.next = pre
            pre = cur
            cur = tmp
            n -= 1
        if con:
            con.next = pre
        else:
            head = pre
        tail.next = cur
        return head
        

题解一结果:
92.反转链表Ⅱ_第2张图片

你可能感兴趣的:(朱滕威的面试之路)