Leetcode 記錄 不會解的題

高空飛翔的美人魚發表於2020-11-13

記錄我不解不出來的題

NO.1 奇偶連結串列

問題描述
在這裡插入圖片描述

連結串列基礎

在這裡插入圖片描述
連結串列和陣列的區別在於:連結串列沒有索引,但是(1)連結串列可以很快找到下一塊,(2)連結串列在記憶體中可以不連續儲存

簡單的連結串列元素順序更換
在這裡插入圖片描述
目的是為了更換3,4. p0指向2,p1指向3.p3指向4.交換3,4的時候使用下面步驟:
1.p1.next指向5 ,
在這裡插入圖片描述
2. p2.next指向3在這裡插入圖片描述
3. p0的next指向4在這裡插入圖片描述

實戰程式碼

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def oddEvenList(self, head: ListNode) -> ListNode:

        f_p1 = None
        pointer1 = head
        pointer2 = head
        counter = 1

        if head == None or head.next == None:  # 特殊情況
            return head

        while pointer1.next != None:  # 找到最後就不找了
            f_p1 = pointer1
            pointer1 = pointer1.next
            counter += 1

            if counter % 2 == 1 and counter > 1:  # 開始移動
                f_p1.next = pointer1.next

                pointer1.next = pointer2.next
                pointer2.next = pointer1

                pointer2 = pointer2.next  # pointer2往後移動一格
                f_p1, pointer1 = pointer1, f_p1  # 順序變了我們重新糾正過來。

            # 下面這段程式碼可以幫助檢視所有的步驟過程。
            # str1 = ""
            # test = head
            # while test != None:
            #     str1 += "->" + str(test.val)
            #     test = test.next
            # print(str1, "|  f_p1:", f_p1.val, "|  p1:", pointer1.val, "|  p2:", pointer2.val, "|  counter:", counter)
        return head

相關文章