leetcode92 reversed Linked List

因爲是中間一部分發生逆轉,
最後的字符串爲 左正序鏈表+中間逆序鏈表+右邊正序鏈表
所以要安排幾個指針分別存放左正序鏈表的頭和尾,中間逆序鏈表的頭和尾,右邊正序鏈表的頭。
首先我們要給鏈表加個空頭,因爲有可能從第一個數字就開始旋轉。
然後先找到左索引的前一個數字,也就是正序鏈表的尾指針
再找到右索引,從左索引到右索引的鏈表要進行逆序,可以依次逆轉,因此要設置逆轉完的頭指針和尾指針,只要頭指針不是右索引就依次懟進去。
最後鏈接起來。

# 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 m==n:
            return head
        p=ListNode(0)
        p.next=head
        head=p1=p2=p
        while(p):
            if m==1:
                p1=p
            if n==0:
                p2=p
                h=t=p1.next
                while(h!=p2):
                    tmp=t.next.next
                    t.next.next=h
                    h=t.next
                    t.next=tmp
                p1.next=h
                break                    
            p=p.next
            m-=1
            n-=1
        return head.next
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章