給定乙個鍊錶,請在不修改節點內部值的情況下,兩兩交換其中相鄰的節點,並返回交換後鍊錶的頭節點。
例如:已知 鍊錶節點的定義、鍊錶與列表相互轉換 的**如下:原鍊錶轉換為列表:[1, 2, 3, 4]
最終的鍊錶轉換為列表:[2, 1, 4, 3]
原鍊錶轉換為列表:[1, 2, 3, 4, 5]
最終的鍊錶轉換為列表:[2, 1, 4, 3, 5]
原鍊錶轉換為列表:
最終的鍊錶轉換為列表:
class listnode: # 單鏈表
def __init__(self, val=0, next=none):
self.val = val # 鍊錶節點上儲存的元素
self.next = next # 指向下乙個鍊錶節點
def list_to_list_node(numbers): # 將列表轉換為單向鍊錶,並返回鍊錶的頭節點
dummy_head = listnode(0)
pre = dummy_head
for number in numbers:
pre.next = listnode(number)
pre = pre.next
pre = dummy_head.next
return pre
def list_node_to_list(node): # 將單向鍊錶轉換為列表
result =
while node:
node = node.next
return result
class solution:
dummy_head = listnode(next=head) # 設定虛擬頭節點
cur = dummy_head
while cur.next is not none and cur.next.next is not none:
tmp1, tmp2, t*** = cur.next, cur.next.next, cur.next.next.next # 臨時節點1、節點2、節點3
cur.next = tmp2 # 改變節點指向,當前節點通過 next 指向節點2
cur.next.next = tmp1 # 改變節點指向,下個節點通過 next 指向節點1
cur.next.next.next = t*** # 改變節點指向,下下個節點通過 next 指向節點3
cur = cur.next.next # 當前節點移動2位(變為節點1)
return dummy_head.next
class solution:
cur = head
while cur is none or cur.next is none: # 遞迴終止條件:當前節點或下個節點為空
return cur
post = cur.next # 臨時儲存下個節點
post.next = cur # 改變節點指向,下個節點通過 next 指向當前節點
return post # 每次遞迴呼叫後,當前節點和下個節點指向發生改變,子鍊錶都是從下個節點開始
python程式設計題彙總(持續更新中……) 兩兩交換兩個相鄰節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。如 給定1 2 3 4,返回2 1 4 3。說明 方法一 交換兩個節點裡的值而節點不動。該題禁止這樣做 方法二 老老實實的交換就好了 我的 if head null return head if head.next null return h...
leetcode演算法題24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。輸入 head 1,2,3,4 輸出 2,1,4,3 輸入 head 輸出 輸入 head 1 輸出 1 思路一 這個題是基本的鍊錶操作題,可以採取迭代的方法實現,先建立 dumm...
兩兩交換鍊錶中的節點 python
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 輸入 head 1,2,3,4 輸出 2,1,4,3 示例 2 輸入 head 輸出 示例 3 輸入 head 1 輸出 1 1 分別使用兩個指標p,q 記錄當前節點和當...