链表 12. 奇偶链表

题目:

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。    中等

方法:双指针  时间复杂度O(N) 空间复杂度O(1)

def oddEvenList(head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head is None or head.next is None or head.next.next is None:
            return head

        odd = head
        even = head.next

        p1 = odd
        p2 = even
        while p2 and p2.next:
            p1.next = p1.next.next
            p1 = p1.next
            p2.next = p2.next.next
            p2 = p2.next
        
        p1.next = even

        return odd

 

posted @ 2022-07-14 16:30  Liang-ml  阅读(13)  评论(0)    收藏  举报