题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:对于该题,改变节点内部的值非常简单。但题目规定我们不能只取改变节点内部的值,所以只要改变指向节点的指针即可。
代码如下:
public static ListNode swapPairs(ListNode head) {
//如果头节点为空,或者只有一个节点直接返回即可
if(head == null || head.next==null){
return head;
}
//两个指针中的第一个节点
ListNode p = head;
//两个指针中的第二个节点
ListNode q = p.next;
//temp用于记录每次交换后的前驱,注意该节点十分重要
ListNode temp = null;
head = q;
p.next = q.next;
q.next = p;
temp = p;
while(p!=null)
{
p = p.next;
if(p==null) {
//交换后,如果没有节点则退出
break;
}else {
q = p.next;
}
if(q==null) {
//交换后,如果只有一个节点则退出
break;
}
else{
p.next = q.next;
q.next = p;
//注意这里temp的用法
temp.next = q;
temp = p;
}
}
return head;
}
简单来说,这道题还是十分简单的,只需要注意temp的作用及用法即可。