Python程式設計題49 兩兩交換鍊錶中的節點

2022-09-19 21:03:17 字數 1663 閱讀 9530

給定乙個鍊錶,請在不修改節點內部值的情況下,兩兩交換其中相鄰的節點,並返回交換後鍊錶的頭節點。

例如:

原鍊錶轉換為列表:[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 記錄當前節點和當...