题目:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
来源:力扣(LeetCode)
链接:力扣
示例:
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:输入:head = []
输出:[1]
示例 3:输入:head = [1]
输出:[1]
解法:
把问题转换为将原链表中奇偶位置元素互换。使用2个列表存放奇偶位置的元素,然后再拼成链表。
代码:
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]: odd = [] even = [] index = 1 while head: if index % 2: odd.append(head.val) else: even.append(head.val) head = head.next index += 1 head = point = ListNode(-1) for index, value in enumerate(even): node = ListNode(value) point.next = node point = point.next node = ListNode(odd[index]) point.next = node point = point.next if len(odd) > len(even): node = ListNode(odd[-1]) point.next = node point = point.next return head.next