很快嗷,一遍过
代码如下:

class Solution:
    def oddEvenList(self , head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        
        odd, even = None, None
        oddPtr, evenPtr = None, None
        isOdd = True                    # 判断当前节点奇偶
        
        p = head
        while p:
            if isOdd:                   # 奇加入奇链表
                isOdd = False
                if not odd:
                    odd = p
                    oddPtr = odd
                else:
                    oddPtr.next = p
                    oddPtr = oddPtr.next
            else:                       # 偶加入偶链表
                isOdd = True
                if not even:
                    even = p
                    evenPtr = even
                else:
                    evenPtr.next = p
                    evenPtr = evenPtr.next
                    
            p = p.next
        
        evenPtr.next = None             # 偶链表尾结点的下一个必须为空
        oddPtr.next = even
        
        return odd

一遍过是一遍过了,可是太长了
看完评论区后发现可以将 even 作为判断条件
于是重写,在重写的过程中还发现自己原先的做法复杂了
代码如下:

class Solution:
    def oddEvenList(self , head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        
        odd, even, evenHead = head, head.next, head.next
        
        while even and even.next:
            odd.next = even.next
            odd = odd.next          # even.next.next 为 odd
            even.next = odd.next
            even = even.next        # odd.next.next 为 even
        
        odd.next = evenHead
        
        return head

odd 也可以作为判断条件,不过得确保链表中起码有两个结点