给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
如:给定1->2->3->4,返回2->1->4->3。
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
方法一:交换两个节点里的值而节点不动。(该题禁止这样做)
方法二:老老实实的交换就好了
我的代码:
public ListNode swapPairs(ListNode head) {
if(head == null) return head;
if(head.next == null)return head;
if(head.next.next == null) {
//只有两个
ListNode tmp = head;
head = head.next;
head.next = tmp;
tmp.next = null;
return head;
}
ListNode pre,p,q,r;
p = head;
q = p.next;
r = q.next;
p.next = r;
q.next = p;
head = q;
while (r!=null) {
if(r.next == null) {
return head;
}
//调整位置
q = r.next;
pre = p;
p = r;
r = r.next.next;
p.next = r;
q.next = p;
pre.next = q;
}
return head;
}