題外話:之前說了寫了代碼也不一定會寫題解,因爲懶,然後我就真的沒寫……題目斷斷續續堅持在做,這代碼都是好早之前寫的了,題解嘛……果然,我就是個鴿子,咕咕咕。
反正你們應該也不需要我的題解,畢竟網上那麼多,我就寫着做個紀念。
好了,說正題。題目的大意是:
給定一個鏈表,你需要兩兩交換其中相鄰的節點,並返回交換後的鏈表。但是你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
樣例輸入:
1->2->3->4
樣例輸出:
2->1->4->3
從示例可以看出,第一個節點和第二個節點做了交換,第三個節點和第四個節點做了交換。
leetcode中的python鏈表是這樣定義的:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
這就是一個簡單的模擬題,直接上代碼吧,註釋很詳細:
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
"""
兩兩交換給定鏈表的節點
:param head: 鏈表頭結點
:return:
"""
# 如果鏈表爲空,或鏈表長度爲1,就不用交換了,直接返回
if head is None or head.next is None:
return head
# p1作爲一個遊標,遍歷整個鏈表,最開始指向頭結點
p1 = head
# 現在last指定第三個節點
last = p1.next.next
# second指向第二個節點
second = p1.next
# 把第一個節點放到second後面去
second.next = p1
# 並且使 *前*第一個節點的next指向第三個節點last
p1.next = last
# 現在second是第一個節點,並且完成了第一個節點和第二個節點的交換
head = second
# 後面重複這個過程即可
while p1.next:
if p1.next.next is None:
break
first = p1.next
second = first.next
last = second.next
p1.next = second
second.next = first
first.next = last
p1 = first
# 返回頭節點
return head
轉載請註明出處:https://blog.csdn.net/aaronjny/article/details/102933663