递归法
简洁而容易理解,内存消耗要小一点
递归:
终止条件:就是当前节点为空或者next为空,不够两个。
循环单元:ListNode next = head.next;
head.next = swapPairsR(next.next);
next.next = head;
public ListNode swapPairsR(ListNode head){
//终止条件就是当前节点为空或者当前节点的下一个节点为空,意思就是不够两个了,没法交换了。
if (head == null || head.next == null){
return head;}
//把当前节点的下一个节点定义为next
ListNode next = head.next;
//递归:第一个节点指向第三个节点
head.next = swapPairsR(next.next);
next.next = head;
return next;
}
非递归一次循环遍历
其实是一个思想,还是要理解递归的本质。
public ListNode swapPair(ListNode head){
//新建一个前序节点
ListNode pre = new ListNode(0);
//前序节点指向head
pre.next = head;
ListNode cc = pre;
while(cc.next != null && cc.next.next != null){
ListNode start = cc.next;
ListNode end = cc.next.next;
cc.next = end;
start.next = end.next;
end.next = start;
cc = start;
}
return pre.next;
}