[LeetCode] 24. Swap Nodes in Pairs ☆☆☆(链表,相邻两节点交换)

Swap Nodes in Pairs

描述

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

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

说明:

  • 你的算法只能使用常数的额外空间。    

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

思路

该题属于基本的链表操作题。

  • 设置一个虚拟头结点dummyHead

  • 设置需要交换的两个节点分别为node1node2,同时设置node2的下一个节点next

在这一轮操作中
  • node2节点的next设置为node1节点

  • node1节点的next设置为next节点

  • dummyHead节点的next设置为node2

  • 结束本轮操作

接下来的每轮操作都按照上述进行。

代码

public static ListNode swapPairs(ListNode listNode) {
        if (listNode == null) {
            return null;
        }
        ListNode head = new ListNode(-1);
        head.next = listNode;
        ListNode pHead = head;
        while (pHead.next != null && pHead.next.next != null) {
            ListNode node1 = pHead.next;
            ListNode node2 = pHead.next.next;
            ListNode next = node2.next;
            
            node2.next = node1;
            node1.next = next;
            pHead.next = node2;
            
            pHead = node1;
        }
        return head.next;
    }
原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/11064194.html