19. Reverse Linked List II


道しるべ

  • インデックスm(左)からn(右)を逆順に並べ替えます.インデックスmは1から始まる.

  • 左、右が左<=右の場合は、左と右を逆順に並べて逆順リストに戻ります.


  • 1.重複構造を使用してノードを反転

    
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
            
            #예외처리
            if not head or left == right:
                return head
            
            root = start = ListNode(None)
            root.next = head
            
            #start, end 지정
            
            for _ in range(left - 1):
                start = start.next
            
            end = start.next
            
            #반복하면서 노드 차례대로 뒤집기
            
            for _ in range(right - left):
                tmp, start.next, end.next = start.next, end.next, end.next.next
                start.next.next = tmp
                
            return root.next

  • 左が2,右が5と仮定して解く.

  • startは変更が必要な2の前の点1を指し、endはstartを指す.next in 2として指定します.

  • headは1で、その前にルートを作成し、headの前に配置します.
  • 後根.nextを最終結果に戻します.

  • startとendを基準に、次のように繰り返し、逆順序で反転します.

  • 2)開始は繰り返し行われる部分である.

  • start.nextをtmp,startとして指定します.次はend次になる.

  • end.次はendnext.次は前の値を引き寄せます.そして始まります.next.tmpとしてnextを指定します.
  • 、すなわち、前のstart.導入nextノードと同じです.

  • 左右を繰り返すと、最終結果は5)回.

  • 最後はroot車に戻ればnextでいいです.

  • 複数の割当て
  • も同様の結果を得ることができ,以下に示す.
  • 
       for _ in range(right - left):
       	tmp = start.next
        start.next = end.next
        end.next = end.next.next
        start.next.next = tmp
    
    

    ✔アンダー()


  • 最後の値をエンタープライズに保存する場合

  • 値を無視したい場合

  • 変数、関数名に特殊な意味や機能を付与する場合.

  • 国際化、ローカリゼーション関数を使用する場合

  • 数値テキスト値を区切る桁数の区切り記号として使用します.