一、题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2
输入:head = []
输出:[]
示例 3
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
二、代码
代码如下:
# 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]:
tail = head
list = []
list1 = []
list2 = []
result = []
# 将链表保存至list中
while (tail):
list.append(tail.val)
tail = tail.next
for i in range(len(list)):
if i%2 == 0:
list1.append(list[i])
else:
list2.append(list[i])
for i in range(max(len(list1),len(list2))):
if len(list2) != 0:
result.append(list2.pop(0))
if len(list1) != 0:
result.append(list1.pop(0))
#result为空时
lenth=len(result)
if lenth==0:
return None
#result不为空时,将result列表转换为单链表
head=ListNode(result[0],None)
tail=head
for i in range(lenth-1):
node=ListNode(result[i+1],None)
tail.next=node
tail=node
return head
三、解题思路
PS:个人能力有限,不考虑时间空间最优。
本题我的解题思路是将链表转换为list列表,然后将list列表中的奇数位数值和偶数位数值分别提取到list1和list2中,最后将list1和list2列表交叉合并起来为result列表,将result列表转化为链表输出即可。