美文网首页leetcode算法
leetcode链表之奇偶链表

leetcode链表之奇偶链表

作者: 小奚有话说 | 来源:发表于2022-03-31 18:49 被阅读0次

    328、奇偶链表

    题目:

    给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

    第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

    请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

    示例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]
    

    思路:

    按照顺序遍历,然后遇到奇结点则将其移到偶结点前

    代码:

    class Solution:
        def oddEvenList(self, head: ListNode) -> ListNode:
            # 如果链表少于两个结点,则不需要进行操作
            if not head or not head.next or not head.next.next: return head
            # 已经移动后的奇结点的位置
            even = head
            # 已经移动后偶结点的位置,即当前结点的前一个结点
            odd = head.next
            # 当前结点,每次向后移动两个位置
            cur = head.next.next
            while cur:
                # 保存当前结点的下一个结点,避免指针丢失
                next = cur.next
                # 将当前结点插入到奇结点后
                cur.next = even.next
                even.next = cur
                # 删除当前结点所在位置
                odd.next = next
                # 当前结点向后移动两个结点
                odd = cur = next
                if cur: cur = cur.next
                # 奇结点移动一个位置
                even = even.next
            return head
    

    相关文章

      网友评论

        本文标题:leetcode链表之奇偶链表

        本文链接:https://www.haomeiwen.com/subject/mwvnjrtx.html