Files
LeetCode/链表/9. 两两交换链表中的节点.md
T

75 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 两两交换链表中的节点
## 题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 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;
}
}
```