24. 两两交换链表中的节点(Python)

题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例

给定 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

如有任何疑问,欢迎评论区留言~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。