需求:现在输入一个链表,1->2->3->4,对其相邻两个节点进行交换后得到新链表:2->1->4->3,请给出具体的实现。
一、实现思路
创建一个辅助的头节点,这样可以统一处理头节点和其他节点的交换逻辑。
使用两个指针,一个指向当前要交换的两个节点的前一个节点(prev),另一个指向当前要交换的第一个节点(current)。
在链表上迭代,每次交换current和current.next指向的节点。
更新prev和current指针,继续下一对节点的交换。
返回辅助头节点的下一个节点,即新的头节点。
二、实现代码
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 方法实现了节点的两两交换。这个方法首先创建一个辅助的头节点来简化边界条件的处理,然后通过迭代的方式遍历链表,并在每一步中交换一对节点。