题目链接: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 = nextclass Solution:def oddEvenList(self, head: ListNode) -> ListNode:if head is None:return Noneodd_temp = headeven_head = head.nexteven_temp = head.nextwhile even_temp is not None and even_temp.next is not None:odd_temp.next = even_temp.nextodd_temp = odd_temp.nexteven_temp.next = odd_temp.nextodd_temp.next = even_headeven_temp = even_temp.nextreturn head
