单链表指定区间反转(python)

单链表中的第m和n之间元素反转

m = 2,n = 4

具体做法:

  • step 1:我们可以在链表前加一个表头,后续返回时去掉就好了,因为如果要从链表头的位置开始反转,在多了一个表头的情况下就能保证第一个节点永远不会反转,不会到后面去。
    • res = ListNode(-1)
      res.next = head
  • step 2:使用两个指针,一个指向当前节点,一个指向前序节点。
    • #前序节
       pre = res
      #当前节点
      cur = head
  • step 3:依次遍历链表,到第m个的位置。
    • for i in range(1,m):
            pre = cur
            cur = cur.next
  • step 4:对于从m到n这些个位置的节点,依次断掉指向后续的指针,反转指针方向。
    • for i in range(m, n):
            temp = cur.next        #temp—>3
            cur.next = temp.next     #2—>4
            temp.next = pre.next     #3—>2
            pre.next = temp            #1—>3

       

       

       

       

       

       

       

      得到-1—>1—>3—>2—>4—>5—>6

       

       

       

       

       

       

      得到-1—>1—>4—>3—>2—>5—>6

       

  • step 5:返回时去掉我们添加的表头

    return res.next

def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
        # write code here
        #加个表头
        res = ListNode(-1)
        res.next = head
        #前序节点
        pre = res
        #当前节点
        cur = head
        #找到m
        for i in range(1,m):
            pre = cur
            cur = cur.next
        #从m反转到n
        for i in range(m, n):
            temp = cur.next
            cur.next = temp.next
            temp.next = pre.next
            pre.next = temp
        #返回去掉表头
        return res.next
posted @   小仙女、  阅读(367)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示