Python 2.7 奇偶链表
我在leetcode上看到一个问题,如: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
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)
)