赞
踩
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
因为不能改变修改节点内部的值,只能将节点进行交换,所以我们使用虚拟头节点。
第一步:定义一个虚拟头节点,指向链表的头节点;创建一个临时指针pre,指向虚拟头节点。
第二步:只有当pre.next,pre.next.next不为空,才能进行交换,否则就是已经交换完成或者不满足交换的条件。
将cur的下一个节点指向post的下一个节点
post的下一个节点指向cur
pre的下一个节点指向post
第三步:返回链表头节点
代码展示:
- # 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):
- res = ListNode(next=head) # 创建一个虚拟头节点
- pre = res # 定义一个临时指针,指向虚拟头节点
- while pre.next and pre.next.next:
- cur = pre.next
- post = pre.next.next
-
- cur.next = post.next # 将cur的下一个节点指向post的下一个节点
- post.next = cur # 将post的下一个节点指向cur
- pre.next = post # 将pre的下一个节点指向post
-
- pre = pre.next.next # 将pre指向pre的下一个节点的下一个节点
- return res.next # 返回链表的头节点

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。