题目链接:https://leetcode-cn.com/problems/odd-even-linked-list/
难度:中等

描述:
给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
第一个节点的索引被认为是奇数, 第二个节点的索引为偶数,以此类推。
请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
你必须在328. 奇偶链表 - 图1 的额外空间复杂度和328. 奇偶链表 - 图2的时间复杂度下解决这个问题。

提示:
节点数:[0, 10000]

题解

思路:
维护3个指针odd_tempeven_headeven_temp。分别指向奇数节点末尾,偶数节点开头和偶数节点末尾。
每次前进,将odd_temp指向even_temp.nexteven_temp指向even_temp.next.next,再将odd_temp.next指向even_head

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution:
  7. def oddEvenList(self, head: ListNode) -> ListNode:
  8. if head is None:
  9. return None
  10. odd_temp = head
  11. even_head = head.next
  12. even_temp = head.next
  13. while even_temp is not None and even_temp.next is not None:
  14. odd_temp.next = even_temp.next
  15. odd_temp = odd_temp.next
  16. even_temp.next = odd_temp.next
  17. odd_temp.next = even_head
  18. even_temp = even_temp.next
  19. return head