leetcode題解第24題 Swap Nodes in Pairs (兩兩交換鏈表中的節點)

題外話:之前說了寫了代碼也不一定會寫題解,因爲懶,然後我就真的沒寫……題目斷斷續續堅持在做,這代碼都是好早之前寫的了,題解嘛……果然,我就是個鴿子,咕咕咕。

image.png

反正你們應該也不需要我的題解,畢竟網上那麼多,我就寫着做個紀念。

image.png

好了,說正題。題目的大意是:

給定一個鏈表,你需要兩兩交換其中相鄰的節點,並返回交換後的鏈表。但是你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

樣例輸入:

1->2->3->4

樣例輸出:

2->1->4->3

從示例可以看出,第一個節點和第二個節點做了交換,第三個節點和第四個節點做了交換。

leetcode中的python鏈表是這樣定義的:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

這就是一個簡單的模擬題,直接上代碼吧,註釋很詳細:

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        """
        兩兩交換給定鏈表的節點
        :param head: 鏈表頭結點
        :return:
        """
        # 如果鏈表爲空,或鏈表長度爲1,就不用交換了,直接返回
        if head is None or head.next is None:
            return head
        # p1作爲一個遊標,遍歷整個鏈表,最開始指向頭結點
        p1 = head
        # 現在last指定第三個節點
        last = p1.next.next
        # second指向第二個節點
        second = p1.next
        # 把第一個節點放到second後面去
        second.next = p1
        # 並且使 *前*第一個節點的next指向第三個節點last
        p1.next = last
        # 現在second是第一個節點,並且完成了第一個節點和第二個節點的交換
        head = second
        # 後面重複這個過程即可
        while p1.next:
            if p1.next.next is None:
                break
            first = p1.next
            second = first.next
            last = second.next
            p1.next = second
            second.next = first
            first.next = last
            p1 = first
        # 返回頭節點
        return head

轉載請註明出處:https://blog.csdn.net/aaronjny/article/details/102933663

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章