zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 46

    Odd Even Linked List

    要点:实现题,最简单的方法就是交错的连接even/odd的下一个结点。p1表示当前已经连好的odd,p2表示当前已经连好的even。最后只需要开始记录even的head,就可以用最后p1.next来连成一个linked list。

    • invariant是p2 and p2.next:表示当前even存在,并且下一个odd存在(注意上一轮已经确保当前odd存在)
    • 其实invariant也可以是通常的p1 and p2:表示当前已连好的odd和even都存在。之所以不这样做是保证在退出loop后p1还是valid,这样就可以连接p1.next(类似于用cur.next作为invariant保证cur valid)
    • 注意这题貌似和Copy List with Random Pointer很像,但是那题一定是配对出现的,所以invariant只需一个node。另外因为不需要把copy连上,所以那题就是对当前node,而不是copy and copy.next
    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def oddEvenList(self, head):
            """
            :type head: ListNode
            :rtype: ListNode
            """
            if not head or not head.next: return head
            p1,p2,pre = head, head.next, head.next
            while p2 and p2.next:
                p1.next = p2.next
                p1 = p1.next
                p2.next = p1.next
                p2 = p2.next
            
            p1.next = pre
            return head
    
    
  • 相关阅读:
    淘宝技术架构演进之路
    单点登录
    [c++11] ——条件变量(Condition Variable)
    std::lock_guard unique_lock
    C++中push_back和emplace_back的区别
    C++11 CAS无锁函数compare_exchange_weak的使用
    C++11新特性之 rvalue Reference(右值引用)
    C++ auto和decltype的区别
    ovs contrack
    周总结03
  • 原文地址:https://www.cnblogs.com/absolute/p/5690307.html
Copyright © 2011-2022 走看看