问题要求:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例:
这个问题的实质其实还是给定一段区间,然后把区间之内的节点进行反转,只不过这个区间的长度为两个节点。
下面是借助虚拟节点的解法:
public ListNode swapPairs(ListNode head) {
//虚拟节点
ListNode dummyNode = new ListNode(-1);
dummyNode.next=head;
ListNode pre=dummyNode;
while (pre.next!=null&&pre.next.next!=null){
ListNode cur=pre.next;
ListNode next=pre.next.next;
pre.next=next;
cur.next=next.next;
next.next=cur;
pre=cur;
}
return dummyNode.next;
}