给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
一种超过时间复杂度的算法(自己写的,真菜,还蠢):
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode ln=head;
if(head==null||head.next==null) return head;
while(ln!=null&&ln.next!=null) {
ListNode tem=ln.next;
ln.next.next=ln;
ln.next=tem.next;
ln=ln.next;
}
return head;
}
}
参考的递归算法:
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null ||head.next==null)
return head;
ListNode tem=head.next;
head.next=swapPairs(head.next.next);
tem.next=head;
return tem; //始终返回tem
}
}