Leetcode做题日记:24. 两两交换链表中的节点(PYTHON)

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

        L=ListNode(0)
        L.next=head
        s1=L
        SS=ListNode(0)
        ss=SS  #在链表操作时,备一个副本,做最后的输出
        a1=s1.next
        if a1==None:
            return []
        a2=s1.next.next
        while a1!=None or a2!=None: 
            if a1==None:
                break  #因为a2也为None,不用操作了
            if a2==None:
                bb1=ListNode(a1.val) #新建一个结点储存这个值
                ss.next=bb1 #把这个节点分配给ss.next
                break
            bb1=ListNode(a2.val)
            ss.next=bb1
            ss=ss.next #更新结点为下一个节点,即到现在bb1的这个节点
            bb1=ListNode(a1.val)
            ss.next=bb1 #这里的next指的是分配下一个新节点给bb1
            ss=ss.next #相当于指针指到新bb1这个节点
            
            s1=s1.next.next #更新值
            a1=s1.next
            if a1==None: #如果无法更新,说明结束
                break
            a2=s1.next.next
            
                
        return SS.next #返回副本的.next
        
28ms,只击败了48%
下次可尝试通过改变链表.next来做    
        
        
        
        
        
        
        
第一次的代码
永远超出时间限制,赋值不对,这里a1=s1.next,a1就是一个链表啊,怎么会为None呢,所以,只能换成a1.val,就是当前节点了,那么,用新的ListNode(a1.val)来把这个值变成节点
        a1=s1.next
        a2=s1.next.next
        while a1!=None or a2!=None:
            if a1==None:
                break
            if a2==None:
                ss.next=a1
                break
            ss.next=a2
            ss=ss.next
            ss.next=a1
            ss=ss.next
            
            s1=s1.next.next
            
            a1=s1.next
            a2=s1.next.next
            
                
        return SS.next 
        
        

猜你喜欢

转载自blog.csdn.net/weixin_44033136/article/details/85338271