题目描述:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]示例 2:
输入:head = [] 输出:[]示例 3:
输入:head = [1] 输出:[1]提示:
- 链表中节点的数目在范围
[0, 100]
内0 <= Node.val <= 100
需要注意:
- 在交换两个节点后,需要更新相应的指针
- 需要特别注意头节点的处理,因为头节点的交换会改变链表的头
核心思路是通过遍历链表,对于每两个相邻的节点进行交换。在交换节点时,需要注意处理头节点以及更新相应的指针。
/**
* 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) {
if (head == null || head.next == null) return head;
ListNode temp = head;
ListNode pre = temp;
ListNode cur = null;
ListNode nex = null;
while (temp != null && temp.next != null) {
pre = temp;
if (temp == head) {
cur = temp;
nex = temp.next;
cur.next = nex.next;
nex.next = cur;
head = nex;
} else if (temp.next.next == null) break;
else {
cur = temp.next;
nex = cur.next;
cur.next = nex.next;
pre.next = nex;
nex.next = cur;
temp = temp.next.next;
}
}
return head;
}
}