算法学习打卡计划

leetcode第九十二题—反转链表 II

2020-04-21  本文已影响0人  不分享的知识毫无意义

又是一道升级题,还记得原来的翻转链表嘛,这个是要求指定m和n翻转链表。或许你忘了链表翻转怎么做,我编一个口诀:
要问把一个链表翻转分几步,总共分五步,第一步定义一个新链表和pre为空的链表,第二步拿掉cur的头节点,第三步,pre节点给cur.next,第四步,cur的头结点给pre,第五步,更新cur(用tmp)。除了那个对列实现,都可以用这个口诀,当然对列实现是最好理解的。

1.题目

原题

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。

例子

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

2.解析

这道题关键是链表的拆分和合并,小知识点。

3.python代码

class Solution:
    def reverseBetween(self, head, m, n):
        if head is None or head.next is None:
            return head
        new = ListNode(0)
        new.next = head
        start = new
        for i in range(m-1):
            start = start.next#m-2个节点
        end = cur = start.next
        pre = None
        for i in range(n-m+1):
            next = cur.next
            cur.next = pre#翻转过程,记住
            pre = cur
            cur = next
        start.next = pre
        end.next = cur
        return new.next
上一篇 下一篇

猜你喜欢

热点阅读