美文网首页
36.翻转链表(Python)

36.翻转链表(Python)

作者: 八菜冰 | 来源:发表于2018-12-16 22:59 被阅读0次
  • 描述
    给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null
  • Solution
class Solution:
    """
    @param head: ListNode head is the head of the linked list 
    @param m: An integer
    @param n: An integer
    @return: The head of the reversed ListNode
    """
# 找到k位置的节点
    def findth(self,k,head):
        for i in range(k):
            if head is None:
                return None
            head = head.next
        return head
#三指针单链表翻转
    def reverse(self,head):
        prev = None
        while head!= None:
            next = head.next
            head.next = prev
            prev = head
            head = next
        return head
        
    def reverseBetween(self, head, m, n):
        # write your code here
#创建一个0表头
       dummy = ListNode(0,head)
#找到m位置前一点,用于衔接
       m_prev = self.findth(m-1,dummy)
       m_cur = m_prev.next
#n位置点
       n_cur = self.findth(n,dummy)
#记录n_next,用于衔接
       n_next = n_cur.next
#令n位置点的下一个节点为空,用于单链表翻转
       n_cur.next = None
       self.reverse(m_cur)
#衔接
       m_prev.next = n_cur
       m_cur.next = n_next
       return dummy.next
#dalao做法,翻转数组,再头尾衔接
       if head is None:
            return 
        sub_vals = []
        dummy = ListNode(0,head)
        fake_head = dummy
        i = 0
        while fake_head:
            if i == m-1:
                cur = fake_head.next
                j=i+1
                while j>=m and j<=n:
                    sub_vals.append(cur.val)
                    cur = cur.next
                    j=j+1
                sub_vals.reverse()
                sub_head = ListNode(sub_vals[0])
                sub_dummy = ListNode(0,sub_head)
                for val in sub_vals[1:]:
                    node = ListNode(val)
                    sub_head.next = node
                    sub_head = sub_head.next
                fake_head.next = sub_dummy.next
                sub_head.next = cur
            fake_head = fake_head.next
            i=i+1
        return dummy.next
  

相关文章

  • 36.翻转链表(Python)

    描述给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->...

  • 36. 翻转链表 II

    描述 翻转链表中第m个节点到第n个节点的部分 注意事项 m,n满足1 ≤ m ≤ n ≤ 链表长度 样例 给出链表...

  • LeetCode 25 k个一组翻转链表 Reverse Nod

    有关链表的LeetCode做题笔记合集,Python实现 链表定义 25. k个一组翻转链表 Reverse No...

  • 翻转链表

    翻转链表 描述翻转一个链表 样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->nul...

  • 25. K 个一组翻转链表

    K个一组反转链表 翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • 链表翻转

    给定单向链表,返回翻转后的链表

  • 35.翻转链表(Python)

    描述给定一个链表1->2->3->null,这个翻转后的链表为3->2->1->null。 Solution思路:...

  • 链表

    1.翻转链表链表的定义 翻转 快慢指针找链表 的中间位置 3.有序链表的合并 4.判断链表中是否有环解法1: 借助...

  • Swift - LeetCode - 翻转链表

    题目 翻转链表 问题: 翻转链表中第m个节点到第n个节点的部分 说明: m,n满足1 ≤ m ≤ n ≤ 链表长度...

  • K 个一组翻转链表(递归,Kotlin)

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

网友评论

      本文标题:36.翻转链表(Python)

      本文链接:https://www.haomeiwen.com/subject/rhjfkqtx.html