给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 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) {
//0个或 1个结点无需交换
if(null == head || null == head.next)
return head;
ListNode temp = new ListNode(0, head);
//交换后链表以第二个节点为头节点
head = head.next;
//步骤如下图所示
while(null != temp.next && null != temp.next.next) {
ListNode left = temp.next;
ListNode right = temp.next.next;
temp.next = right;
temp = right.next;
right.next = left;
left.next = temp;
temp = left;
}
return head;
}
}