Leetcode 24 兩兩交換鍊錶中的節點

2021-09-19 06:42:09 字數 1553 閱讀 6519

題目描述

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

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

示例:給定 1->2->3->4, 你應該返回 2->1->4->3.

我的方法:

看起來並不算很難,重點應該在於理順整個處理流程。

將節點分為兩兩一組,每次處理兩個節點。

對於頭兩個節點,交換兩個節點後,只需要考慮整體的之後節點即可。

對於中間的節點,交換兩個節點後,要考慮整體之前的節點以及整體之後的節點。

如果最終有節點落單,則不進行交換操作。

戰績一般:執行用時 : 32 ms, 在swap nodes in pairs的python提交中擊敗了9.28% 的使用者。記憶體消耗 : 11.6 mb, 在swap nodes in pairs的python提交中擊敗了0.00% 的使用者。

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class solution(object):

""":type head: listnode

:rtype: listnode

"""if head is none or head.next is none:

return head

# 如果長度在2以上

p=head.next

pre=none

# 遍歷鍊錶

while head:

# 兩兩節點為一組,進行處理

a=head

b=a.next

if b:

head=b.next #鍊錶要持續移動

#交換兩個節點

if pre:

pre.next=b

b.next=a

else:

b.next=a

a.next=none #不要形成環鏈

pre=a

else:

head=b#鍊錶要持續移動

if pre:

pre.next=a

return p

別人的方法:

看了下別人的方法,確實很簡潔。看起來是用的遞迴,沒錯,這個問題用遞迴解決很適合。

class solution(object):

""":type head: listnode

:rtype: listnode

"""if not head or not head.next:

return head

hnext = head.next

head.next, hnext.next = chead, head

return hnext

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...