题目链接:https://leetcode-cn.com/problems/odd-even-linked-list/
难度:中等
描述:
给定单链表的头节点head
,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
第一个节点的索引被认为是奇数, 第二个节点的索引为偶数
,以此类推。
请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
你必须在 的额外空间复杂度和
的时间复杂度下解决这个问题。
提示:
节点数:[0, 10000]
题解
思路:
维护3个指针odd_temp
,even_head
和even_temp
。分别指向奇数节点末尾,偶数节点开头和偶数节点末尾。
每次前进,将odd_temp
指向even_temp.next
,even_temp
指向even_temp.next.next
,再将odd_temp.next
指向even_head
。
# 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: ListNode) -> ListNode:
if head is None:
return None
odd_temp = head
even_head = head.next
even_temp = head.next
while even_temp is not None and even_temp.next is not None:
odd_temp.next = even_temp.next
odd_temp = odd_temp.next
even_temp.next = odd_temp.next
odd_temp.next = even_head
even_temp = even_temp.next
return head