Leetcode做題日記:24. 兩兩交換連結串列中的節點(PYTHON)
阿新 • • 發佈:2019-01-01
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
示例:
給定 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