Python 2.7 奇偶链表

Python 2.7 奇偶链表,python-2.7,optimization,linked-list,Python 2.7,Optimization,Linked List,我在leetcode上看到一个问题,如: Given 1->2->3->4->5->NULL, return 1->3->5->2->4->NULL. 我写道: class Solution(object): def oddEvenList(self, head): oddhead = head evenhead = head.next even = evenhead

我在leetcode上看到一个问题,如:

Given 1->2->3->4->5->NULL,
return 1->3->5->2->4->NULL.
我写道:

class Solution(object):
    def oddEvenList(self, head):
        oddhead = head
        evenhead = head.next
        even = evenhead
        while evenhead and evenhead.next :
            oddhead.next = evenhead.next
            oddhead.next = oddhead
            evenhead.next = oddhead.next
            evenhead.next = evenhead
        oddhead.next = even
        return head
但是上面写着时间超过了限制。

我看到某人的解决方案如下:

class Solution(object):
def oddEvenList(self, head):
    odd, p= head, head and head.next 
    while p and p.next:
        odd.next, p.next.next, p.next = p.next, odd.next, p.next.next #insert 
        odd, p = odd.next, p.next 
    return head
有人能解释一下为什么我的代码在时间限制上失败了吗

对于解决方案,有人能指出该代码在特定环境中是如何工作的吗?我真的不太明白

提前谢谢

有人能解释一下为什么我的代码在时间限制上失败了吗

while
循环中,您永远不会修改
evenhead
,因此
evenhead
永远停留在节点2,循环永远不会终止。你肯定是想做作业的

            oddhead.next = oddhead
            …
            evenhead.next = evenhead
反过来说:

            oddhead = oddhead.next
            …
            evenhead = evenhead.next
-这样你的代码就可以工作了

对于解决方案,有人能指出该代码是如何工作的吗 具体的

该解决方案基本上与您的相同,
odd
等同于您的
oddhead
p
等同于
evenhead
,列表分配

        odd.next, … p.next = p.next, … p.next.next #insert
        odd, p = odd.next, p.next
        … p.next.next… = … odd.next… #insert
等同于您的(如上所述更正)

和列表分配

        odd.next, … p.next = p.next, … p.next.next #insert
        odd, p = odd.next, p.next
        … p.next.next… = … odd.next… #insert
等同于您的(如上所述更正)

-其中一个不同之处在于这项任务

        odd.next, … p.next = p.next, … p.next.next #insert
        odd, p = odd.next, p.next
        … p.next.next… = … odd.next… #insert
在循环中,当你有

        even = evenhead
        …
        oddhead.next = even
前后分别循环;这相当于在每个循环过程中将临时的最后一个奇数节点链接到第一个偶数节点,而不是在循环之后仅将最终找到的最后一个奇数节点链接到第一个偶数节点一次,后者似乎更有效

与您的解决方案相比,另一个解决方案的唯一优点是,由于额外的测试
head和head.next
,它可以优雅地处理空列表(
solution().oddEvenList(None)