給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:
給定 1->2->3->4, 你應該返回 2->1->4->3.
1. 將鍊錶變成陣列
2. 將陣列中的數兩兩交換
3. 將交換後的陣列變成鍊錶
這種方法很low,至少需要遍歷鍊錶一次+陣列一次+兩兩交換陣列一次。很慢
此題另一種思路是使用遞迴的方法,將乙個大的問題變成解決乙個小問題。
首先可以很輕易的得知如何交換兩個結點的方法。那麼在加上遞迴的思路,我們可以這樣做。
設:fun為解決此問題的函式,head為鍊錶的表頭
則:fun(head) = 交換head與head.next + fun(head.next.next)
那麼現在的問題在於遞迴的結束條件是什麼,很輕易得知,當head為null或者head.next為null返回head即可
則,**為
def
(head: listnode)
-> listnode:
ifnot head or
not head.
next
:return head
temp = head.
next
head.
next
= temp.
next
temp.
next
= head
head = temp
head.
next
.next
next
.next
)return head
兩兩交換鍊錶中的節點 leetcode
leetcode位址 兩兩交換鍊錶中的節點 使用兩種方法,迭代和遞迴 這是使用的節點類 public class listnode listnode int val listnode int val,listnode next 判斷是否滿足條件,這裡的條件設定為鍊錶的個數是否為偶數,判斷方法為利用當...
Leetcode 兩兩交換鍊錶中的節點
兩兩交換鍊錶中的節點 題意 給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。給定1 2 3 4,你應該返回2 1 4 3.題解 這個題建議自己畫個圖。主要步驟大概就以下三步。能想出來,這個題基本就解決了。1 使新鍊錶節點的ans...
leetcode演算法題 鍊錶 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。package com.leetcode.鍊錶 author markuszhang vm args date create in 2020 2 2 15 23 public cl...