LeetCode 24 兩兩交換鍊錶中的節點

2021-09-28 17:39:20 字數 1138 閱讀 6731

題目描述:

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

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

示例:

給定 1

->2-

>3-

>

4, 你應該返回 2

->1-

>4-

>

3.

解題方案

思路標籤:鍊錶

本題的遞迴和非遞迴解法其實原理類似,都是更新每兩個點的鍊錶形態完成整個鍊錶的調整

其中遞迴解法可以作為典型的遞迴解決思路進行講解

遞迴寫法要觀察本級遞迴的解決過程,形成抽象模型,因為遞迴本質就是不斷重複相同的事情。而不是去思考完整的呼叫棧,一級又一級,無從下手。如圖所示,我們應該關注一級呼叫小單元的情況,也就是單個f(x)。

其中我們應該關心的主要有三點:

返回值呼叫單元做了什麼

終止條件

在本題中:

返回值:交換完成的子鍊錶

呼叫單元:設需要交換的兩個點為 head 和 next,head 連線後面交換完成的子鍊錶,next 連線 head,完成交換

終止條件:head 為空指標或者 next 為空指標,也就是當前無節點或者只有乙個節點,無法進行交換

**遞迴解法

class

solution

listnode next = head.next;

head.next =

(next.next)

; next.next = head;

return next;

}}

非遞迴解法

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