LeetCode題解 兩兩交換鍊錶中的結點

2021-09-25 03:20:05 字數 902 閱讀 6047

給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例:

給定 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...