LeetCode:328. Odd Even Linked List - Python

问题描述:

328. 奇偶链表

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点偶数节点指的是节点编号奇偶性,而不是节点的值的奇偶性。

请尝试使用原地算法完成。你的算法的空间复杂度应为O(1),时间复杂度应为O(nodes)nodes为节点总数。

示例 :

输入: 1->2->3->4->5->NULL
输出: 1->3->5->2->4->NULL

问题分析:

(1)把奇数位置的节点放到原来的链表里面。
(2)偶数位置的连接分离出去
(3)把分离出去的偶数链表,连接到奇数链表上,即可。

Python3实现:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def oddEvenList(self, head):

        if head == None:return None

        odd, even = head, head.next
        evenHead = even

        while even != None and even.next != None:
            odd.next = even.next  # 奇数位置链表向后移动一个
            odd = odd.next
            even.next = odd.next  # 偶数位置链表向后移动一个
            even = even.next
            
        odd.next = evenHead  # 两个链表链接起来
        return head

声明: 总结学习,有问题或不妥之处,可以批评指正哦。

题目链接: leetcode-cn.com/problems/odd-even-linked-list/

点赞