📅  最后修改于: 2023-12-03 14:56:20.576000             🧑  作者: Mango
在编写 Java 代码时,我们经常需要对链表进行操作。本文介绍一种Java程序,它可以对给定链表的元素进行成对交换。
链表交换的实现思路可以概括如下:
下面是Java程序的实现代码:
public ListNode swapPairs(ListNode head) {
// 处理特殊情况
if (head == null || head.next == null) {
return head;
}
// 维护三个指针
ListNode curr = head;
ListNode prev = null;
ListNode next = null;
ListNode newHead = head.next; // 记录链表的头结点
// 使用while循环交换相邻节点
while (curr != null && curr.next != null) {
next = curr.next;
curr.next = next.next;
next.next = curr;
if (prev != null) {
prev.next = next;
}
prev = curr;
curr = curr.next;
}
return newHead; // 返回新的头结点
}
下面是针对本程序实现的测试代码:
@Test
public void testSwapPairs() {
// 给定链表:1->2->3->4->5
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
// 交换后的链表:2->1->4->3->5
ListNode expected = new ListNode(2);
expected.next = new ListNode(1);
expected.next.next = new ListNode(4);
expected.next.next.next = new ListNode(3);
expected.next.next.next.next = new ListNode(5);
// 调用swapPairs方法,进行链表交换
Solution solution = new Solution();
ListNode actual = solution.swapPairs(head);
// 验证交换后的链表是否正确
while (expected != null) {
assertEquals(expected.val, actual.val);
expected = expected.next;
actual = actual.next;
}
}
本文介绍了一种用于对给定链表的元素进行成对交换的Java程序实现方法。通过维护三个指针,在while循环中交换相邻节点,从而保证了程序的高效性。同时,我们还编写了测试代码,验证了程序的正确性。