需求:现在输入一个链表,1->2->3->4,对其相邻两个节点进行交换后得到新链表:2->1->4->3,请给出具体的实现。

一、实现思路

  1. 创建一个辅助的头节点,这样可以统一处理头节点和其他节点的交换逻辑。

  2. 使用两个指针,一个指向当前要交换的两个节点的前一个节点(prev),另一个指向当前要交换的第一个节点(current)。

  3. 在链表上迭代,每次交换current和current.next指向的节点。

  4. 更新prev和current指针,继续下一对节点的交换。

  5. 返回辅助头节点的下一个节点,即新的头节点。

二、实现代码

public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

public class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(0); // 辅助头节点
        dummy.next = head;
        ListNode prev = dummy;

        while (prev.next != null && prev.next.next != null) {
            ListNode first = prev.next; // 第一个交换节点
            ListNode second = first.next; // 第二个交换节点

            // 交换节点
            prev.next = second;
            first.next = second.next;
            second.next = first;

            // 更新指针
            prev = first;
        }

        return dummy.next;
    }
}

在这段代码中,ListNode 类是链表节点的定义,Solution 类中的 swapPairs 方法实现了节点的两两交换。这个方法首先创建一个辅助的头节点来简化边界条件的处理,然后通过迭代的方式遍历链表,并在每一步中交换一对节点。