From 268ea2fa72fd4e7a8efaa9a32c05a7932b6743a6 Mon Sep 17 00:00:00 2001 From: Wonder Date: Fri, 3 Oct 2025 21:12:17 +0800 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=94=84Update:=20=E4=B8=A4=E4=B8=A4?= =?UTF-8?q?=E4=BA=A4=E6=8D=A2=E9=93=BE=E8=A1=A8=E4=B8=AD=E7=9A=84=E8=8A=82?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 链表/9. 两两交换链表中的节点.md | 75 +++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 链表/9. 两两交换链表中的节点.md diff --git a/链表/9. 两两交换链表中的节点.md b/链表/9. 两两交换链表中的节点.md new file mode 100644 index 0000000..ac3c197 --- /dev/null +++ b/链表/9. 两两交换链表中的节点.md @@ -0,0 +1,75 @@ +# 两两交换链表中的节点 + +## 题目 + +给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 + + + +示例 1: + + +输入:head = [1,2,3,4] +输出:[2,1,4,3] +示例 2: + +输入:head = [] +输出:[] +示例 3: + +输入:head = [1] +输出:[1] + + +提示: + +链表中节点的数目在范围 [0, 100] 内 +0 <= Node.val <= 100 + +## 思路 + +- 模拟 +- 结束条件 + - cur.next == null || cur.next.next == null + + +## 代码 + +```java +/** + * 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) { + // Special + if (head == null || head.next == null) { + return head; + } + // Init: dummyHead, cur + ListNode dummyHead = new ListNode(-1); + dummyHead.next = head; + ListNode cur = dummyHead; + // Traverse: Swap + while (cur.next != null && cur.next.next != null) { + // Swap: A(cur.next) B(cur.next.next) + ListNode tmp1 = cur.next; + ListNode tmp2 = cur.next.next; + ListNode tmp3 = cur.next.next.next; + cur.next = tmp2; + cur.next.next = tmp1; + cur.next.next.next = tmp3; + + cur = cur.next.next; + } + + return dummyHead.next; + } +} +``` \ No newline at end of file