题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例
给定 1->2->3->4, 你应该返回 2->1->4->3.
解答
这里,我们把每两个需要逆序的结点(unit_node_1, unit_node_2)称作一个逆序单元,该逆序单元前一个结点和后一个结点分别是pre_unit和nextunit,循环对每一个逆序单元进行以下逆序操作即可,并及时更新新的。
pre_unit -> [ unit_node_1 -> unit_node_2 ] -> next_unit
== >
pre_unit -> [ unit_node_2 -> unit_node_1 ] -> next_unit
class Solution:
def swapPairs(self, head):
"""
pre_unit -> [ unit_node_1 -> unit_node_2 ] -> next_unit
== >
pre_unit -> [ unit_node_2 -> unit_node_1 ] -> next_unit
:param head:
:return:
"""
pre_head = ListNode(0)
pre_head.next = head
pre_unit = pre_head
while pre_unit.next and pre_unit.next.next:
# 一些结点的定义
unit_node_1 = pre_unit.next
unit_node_2 = unit_node_1.next
next_unit = unit_node_2.next
# 定义结点的逆序连接
pre_unit.next = unit_node_2
unit_node_2.next = unit_node_1
unit_node_1.next = next_unit
# 更新结点pre_unit
pre_unit = unit_node_1
return pre_head.next
如有任何疑问,欢迎评论区留言~