題目描述
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:給定 1->2->3->4, 你應該返回 2->1->4->3.
我的方法:
看起來並不算很難,重點應該在於理順整個處理流程。
將節點分為兩兩一組,每次處理兩個節點。
對於頭兩個節點,交換兩個節點後,只需要考慮整體的之後節點即可。
對於中間的節點,交換兩個節點後,要考慮整體之前的節點以及整體之後的節點。
如果最終有節點落單,則不進行交換操作。
戰績一般:執行用時 : 32 ms, 在swap nodes in pairs的python提交中擊敗了9.28% 的使用者。記憶體消耗 : 11.6 mb, 在swap nodes in pairs的python提交中擊敗了0.00% 的使用者。
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class solution(object):
""":type head: listnode
:rtype: listnode
"""if head is none or head.next is none:
return head
# 如果長度在2以上
p=head.next
pre=none
# 遍歷鍊錶
while head:
# 兩兩節點為一組,進行處理
a=head
b=a.next
if b:
head=b.next #鍊錶要持續移動
#交換兩個節點
if pre:
pre.next=b
b.next=a
else:
b.next=a
a.next=none #不要形成環鏈
pre=a
else:
head=b#鍊錶要持續移動
if pre:
pre.next=a
return p
別人的方法:
看了下別人的方法,確實很簡潔。看起來是用的遞迴,沒錯,這個問題用遞迴解決很適合。
class solution(object):
""":type head: listnode
:rtype: listnode
"""if not head or not head.next:
return head
hnext = head.next
head.next, hnext.next = chead, head
return hnext
LeetCode 24兩兩交換鍊錶的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 給定 1 2 3 4,你應該返回 2 1 4 3.class solution listnode next head.next head.next next.next 指向下...
leetcode24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.說明 你的演算法只能使用常數的額外空間。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。注意while裡tmp1和tmp2已經交換了,所以node tmp1 definit...
leetcode 24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.複製 說明 listnode definition for singly linked list.type listnode struct func head listnode list...