📌  相关文章
📜  用于对给定链表的元素进行成对交换的Java程序(1)

📅  最后修改于: 2023-12-03 14:56:20.576000             🧑  作者: Mango

用于对给定链表的元素进行成对交换的Java程序

在编写 Java 代码时,我们经常需要对链表进行操作。本文介绍一种Java程序,它可以对给定链表的元素进行成对交换。

实现思路

链表交换的实现思路可以概括如下:

  1. 我们需要维护三个指针,分别是curr、prev和next。初始时,我们让curr指向链表的头结点,prev和next都指向null。
  2. 我们需要使用一个while循环,每次循环中我们都需要处理两个相邻的节点。
  3. 在每次循环中,我们需要先用next指针保存当前节点的下一个节点,以免操作后丢失。
  4. 然后将当前节点的next指向prev节点。
  5. 然后将prev指针指向当前节点,将curr指针指向next节点。
  6. 循环结束的条件是curr指针为null,即链表已经全部处理完毕。
  7. 我们需要记录链表的头结点,因为链表的头结点会在交换过程中发生改变。
代码实现

下面是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循环中交换相邻节点,从而保证了程序的高效性。同时,我们还编写了测试代码,验证了程序的正确性。