leetcode 328.

1052 ワード

質問:
単一の接続リストのヘッダが指定されている場合、奇数のインデックスを持つすべてのノードがグループ化され、偶数のインデックスを持つノードがグループ化され、再ソートされたリストが返されます.
1番目のノードは奇数とみなされ、2番目のノードは偶数とみなされる.
偶数配列と奇数群の内部の相対順序は、入力の順序と同じである必要があります.
O(1)の余分な空間的複雑さとO(n)時間的複雑さで問題を解決しなければならない.
プールポリシー:
奇数ノードと偶数ノードを別々に接続し、奇数ノードの末尾と偶数ノードの先頭を接続します.
while文の条件は、奇数が次の接続するノードの偶数と等しくなければならないことです.
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head is None :
            return None
        odd = head
        even = head.next
        even_head = head.next # odd 연결 다하고 even을 연결해주기 위해    
        while even and odd.next.next: # 여기서 even.next 는 odd 다음 연결 노드이다.
            odd.next = odd.next.next
            odd = odd.next
            even.next = even.next.next
            even = even.next
        
        odd.next = even_head # odd 와 even 연결
        return head