1. 程式人生 > 其它 >Leetcode - 24. 兩兩交換連結串列中的節點

Leetcode - 24. 兩兩交換連結串列中的節點

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

示例 1:

輸入:head = [1,2,3,4]
輸出:[2,1,4,3]

示例 2:

輸入:head = []
輸出:[]

示例 3:

輸入:head = [1]
輸出:[1]

提示:

  • 連結串列中節點的數目在範圍 [0, 100] 內
  • 0 <= Node.val <= 100

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解1 2021/8/29 O(n)

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
    def __repr__(self):
        return '{}'.format(self.val) + (('->' + self.next.__repr__()) if self.next else '')

def swapPairs(head: ListNode) -> ListNode:
    # 不能只是交換值,說是這麼說,但你咋知道我是不是交換值
    # 交換值,看看它怎麼判
    if head is None or head.next is None: return head
    l=[]
    while head:
        l.append(head.val)
        head=head.next
    len=l.__len__()
    x=0;y=1
    while y<len:
        l[x]=l[x]+l[y]
        l[y]=l[x]-l[y]
        l[x]=l[x]-l[y]
        x+=2;y+=2
    dummy=ListNode(-1)
    tmp=dummy
    for x in l:
        tmp.next=ListNode(x)
        tmp=tmp.next
    return dummy.next

if __name__ == '__main__':
    head=ListNode(1,ListNode(2,ListNode(3,ListNode(4))))
    print(swapPairs(head))
    head=ListNode(1,ListNode(2,ListNode(3,ListNode(4,ListNode(9)))))
    print(swapPairs(head))
    head=None
    print(swapPairs(head))
    head=ListNode(1)
    print(swapPairs(head))