1. 程式人生 > >Leetcode做題日記:24. 兩兩交換連結串列中的節點(PYTHON)

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