24 两两交换链表中的节点

题目链接: LeetCode

24 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:


**输入:**head = [1,2,3,4]
**输出:**[2,1,4,3]

示例 2:


**输入:**head = []
**输出:**[]

示例 3:


**输入:**head = [1]
**输出:**[1]

提示:

  • 链表中节点的数目在范围 [0, 100]
  • 0 <= Node.val <= 100

Related Topics: 递归, 链表

Likes: 2429 | Dislikes: 0

解题代码

/**
 * @author Charlie Zhang
 * @version v1.0
 * @date 2025-06-17 05:51:30
 * @description 24 两两交换链表中的节点
 */
public class SwapNodesInPairs {
    public static void main(String[] args) {
        Solution solution = new SwapNodesInPairs().new Solution();
    }

    class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode() {}
     * ListNode(int val) { this.val = val; }
     * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode swapPairs(ListNode head) {
            ListNode dummy = new ListNode(-1);
            dummy.next = head;
            ListNode cur = dummy;

            while (cur.next != null && cur.next.next != null) {
                ListNode temp1 = cur.next; // 暂存下一个节点
                ListNode temp2 = cur.next.next.next; // 暂存下一个节点的next节点

                cur.next = cur.next.next; // 改变当前节点的next指针
                cur.next.next = temp1; // 改变当前节点的next节点的next指针
                cur.next.next.next = temp2; // 改变当前节点的next节点的next节点的next指针

                cur = cur.next.next; // 移动当前指针
            }

            return dummy.next;
        }
    }

}
posted @ 2025-10-02 10:45  Charlie_Byte  阅读(10)  评论(0)    收藏  举报