给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。
示例 1:
输入: head = [1,2,3,4,5]
输出: [1,3,5,2,4]
示例 2:
输入: head = [2,1,3,5,6,4,7]
输出: [2,3,6,7,1,5,4]
思路:
给了我们一个链表,让我们分开奇偶节点,所有奇节点在前,偶节点在后。
设定两个虚拟节点,dummyHead1 用来保存奇节点,dummyHead2 来保存偶节点;
遍历整个原始链表,将奇节点放于dummyHead1 中,其余的放置在dummyHead2 中 遍历结束后,将dummyHead2 插入到dummyHead1 后面。
# 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:
odd = dummpy1 = ListNode(0)
even = dummpy2 = ListNode(0)
while head:
odd.next = head
odd = odd.next
head = head.next
if head:
even.next = head
even = even.next
head = head.next
even.next = None
odd.next = dummpy2.next
return dummpy1.next
35. Leetcode 328. 奇偶链表 (链表-双指针)
最新推荐文章于 2024-01-16 10:17:34 发布