19.兩兩交換連結串列中的節點-Leetcode 024(python)
阿新 • • 發佈:2018-12-17
- 題目描述
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
- 示例
給定 1->2->3->4, 你應該返回 2->1->4->3. 說明:
你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
- 解決方案
定義指標first和second,分別指向要交換的兩個節點,交換之後second在first的前面
為了方便操作,在頭結點之前加上一個extr節點
另外有一個節點始終指向要交換的兩個節點的前驅節點
- 程式碼
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ #定義了一個前驅節點但是暫時沒有指向頭 extr = ListNode(0) #如果連結串列為空,直接返回None if head is None: return None # pre.next = head #用first和second分別指向需要交換的兩個節點 pre = extr first = head second = head.next #如果第二個節點為空,直接返回第一個節點 #因為在接下來的while迴圈裡,並沒有針對這種情況作出處理 if second is None: return head #判斷要當前要交換的第二個節點是否為空 while second: #交換節點的值 pre.next = second first.next = second.next second.next = first #pre節點前移,移到往後兩個節點的前一個節點處 pre = first #調整first和second指向下一次要交換的兩個節點 first = first.next #要注意判斷此時的first是否已經是空 if first: second = first.next else: second = None return extr.next