文章目录
- 题目
- 解题方法
- 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和latterpre = pre.next;if (pre != null) {latter = pre.next;}}return head;}
}