給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
輸入: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...