給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:給定 1->2->3->4, 你應該返回 2->1->4->3.
考慮兩個變數值交換的情況,引入中間變數temp,然後交換兩個變數的值。
變數 a,b
引入中間變數 temp
temp = a
a = b
b = temp
同理,引入中間變數temp,完成鍊錶節點的交換。
## 鍊錶的元素是連在一起的,a->b->c
## 所以在交換a,b後,應該為 b->a->c
## 所以不僅要保證a,b位置互換,a還要指向c
class solution:
p = listnode(0)
p.next = head
p1 = p # 加乙個頭節點
while p.next and p.next.next: # 保證有兩個可交換的節點
temp = p.next # 引入中間變數temp
p.next = p.next.next # b 換到 a前面
temp.next = p.next.next # a.next = c a指向c
p.next.next = temp # b.next = a b指向a
p = p.next.next # 從交換後a所在的位置繼續下一次交換
return p1.next
遞迴:遞迴體、遞迴終止條件。
# 沒有下乙個節點,或者只剩下乙個節點時,遞迴終止,返回當前節點。
# 兩個節點進行交換,a.next = b.next a->c a指向c
# 然後 b.next = a b指向a
# 返回b,因為每一次遞迴執行時,b都被換到了前面。
class solution:
if not head or not head.next:
return head
a = head
b = head.next
b.next = a
return b
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...