文章目录
- 题目
- 解题方法
- Code
题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
解题方法
在下面代码中详细注释了
Code
class Solution {
public ListNode swapPairs(ListNode head) {
//如果是空链或者只有一个节点,那么直接返回头节点就行
if (head == null || head.next == null) {
return head;
}
ListNode pre = head;//pre是最初靠前的节点
ListNode latter = head.next;//latter是最初靠后的节点
head = latter;//直接让head=latter,因为一会翻转完成之后,第二个节点就会变成头节点
ListNode temp = null;//防断链,用于之前已经反转好的部分与后边部分的链接
while (pre != null && pre.next != null) {//只剩一个节点或者不剩节点就停止反转
//接下来两行是互换位置
pre.next = latter.next;
latter.next = pre;
if (temp != null) {//temp为空则表明是第一次翻转完,前面没有需要链接的部分
temp.next = latter;
}
temp = pre;
//更新pre和latter
pre = pre.next;
if (pre != null) {
latter = pre.next;
}
}
return head;
}
}