成对交换链表节点的题目要求将链表中每两个相邻节点交换位置。如果链表长度是奇数最后一个节点保持不变。算法思路通过遍历链表每次交换两个相邻的节点。需要考虑链表的头节点如何处理可以使用虚拟头节点来简化边界条件的处理。在每次交换时确保指针的更新顺序正确需要更新当前节点的前一个节点和后一个节点的指向。步骤初始化一个虚拟头节点dummy它指向链表的头节点。使用prev指针遍历链表跳过一对节点并交换它们。对于每一对相邻的节点(node1, node2)执行如下交换prev.next node2node1.next node2.nextnode2.next node1更新prev到node1继续下一对节点。class ListNode { int val; ListNode next; ListNode(int x) { val x; } } 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 a prev.next; ListNode b a.next; // 核心三步交换 a.next b.next; b.next a; //要能连起来 prev.next b; // prev 向后移动两步 prev a; } return dummy.next; } 交换前 prev - a - b - next 交换后 prev - b - a - next 操作顺序不能错 a.next b.next b.next a prev.next b