很快嗷,一遍过
代码如下:
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 也可以作为判断条件,不过得确保链表中起码有两个结点