Python實現兩兩交換鍊錶中的節點

2021-10-19 07:16:49 字數 2340 閱讀 9787

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

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

輸入:head = [1,2,3,4]

輸出:[2,1,4,3]

輸入:head =

輸出:

輸入:head = [1]

輸出:[1]

我們需要兩兩交換鍊錶的節點,很容易就能想到直接遍歷鍊錶然後交換鍊錶的節點即可,思路如下:

我們需要交換鍊錶head,head=node1->node2->node3->node4

在交換之前我們需要先儲存node1和node2

然後將temp.next=node2

改變node2指向的節點,此時node2應該指向node1,而且node1應該指向node3,所以先改變node1的指向的節點,然後再改變node2指向的節點

class

listnode

:def

__init__

(self,val,

next

=none):

ifisinstance

(val,

int)

: self.val = val

self.

next

=next

elif

isinstance

(val,

list):

self.val = val[0]

self.

next

=none

head = self

for i in

range(1

,len

(val)):

node = listnode(val[i]

) head.

next

= node

head = head.

next

class

solution

:def

(self, head: listnode)

-> listnode:

#定義啞節點

dummy = listnode(-1

) dummy.

next

= head

#定義乙個臨時節點,用來儲存交換的狀態

temp = dummy

#遍歷鍊錶

#注意第乙個節點是啞結點,所以我們從第二個開始遍歷

while temp.

next

and temp.

next

.next

:#儲存鍊錶相鄰的兩個節點

node1 = temp.

next

node2 = temp.

next

.next

#將後面的節點移到前面來

temp.

next

= node2

#更改交換後節點的指向

node1.

next

= node2.

next

node2.

next

= node1

#繼續交換後面兩個相鄰的節點

temp = node1

return dummy.

next

head =[1

,2,3

,4]listnode = listnode(head)

solution = solution(

)while res:

print

(res.val)

res = res.

next

class

solution

:def

(self, head: listnode)

-> listnode:

#如果鍊錶的節點個數小於2,不用交換節點直接返回

ifnot head or

not head.

next

:return head

#儲存鍊錶的下乙個節點

new_head = head.

next

#交換後面的節點

head.

next

next

)#更新節點的指向

new_head.

next

= head

return new_head

參考:兩兩交換鍊錶中的節點

兩兩交換鍊錶中的節點 python

給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 輸入 head 1,2,3,4 輸出 2,1,4,3 示例 2 輸入 head 輸出 示例 3 輸入 head 1 輸出 1 1 分別使用兩個指標p,q 記錄當前節點和當...

兩兩交換鍊錶中的節點

給乙個鍊錶,兩兩交換其中的節點,然後返回交換後的鍊錶。樣例 給出 1 2 3 4,你應該返回的鍊錶是 2 1 4 3。遞迴方式 交換p 和 p.next 結點 swaphead p.next swaphead.next p definition for singly linked list.publ...

兩兩交換鍊錶中的節點

給乙個鍊錶,兩兩交換其中的節點,然後返回交換後的鍊錶。給出1 2 3 4,你應該返回的鍊錶是2 1 4 3。首先這個鍊錶只能交換偶數個資料,如果有奇數個資料則最後乙個資料不進行交換。做乙個迴圈將資料兩個兩個的交換,每交換完一次都要往後迭代。definition for singly linked l...