24. 两两交换链表中的节点
一、递归
var swapPairs = function(head) {
// 2、递归结束的条件.需要考虑节点数是奇数还是偶数
if(head == null|| head.next == null){
return head
}
// 两个节点作为一个递归分支,然后将递归分支按照顺序连接起来.
let newHead = head.next
// 1、单层递归逻辑
// 把多个递归分支进行连接
head.next = swapPairs(newHead.next)
newHead.next = head
return newHead
};
二、迭代
var swapPairs = function(head) {
let dummyNode = new ListNode(-1,head)
let temp = dummyNode
// 每次将temp后面的两个节点进行反转
while(temp.next && temp.next.next){
let node1 = temp.next, node2 = temp.next.next;
// 进行反转
temp.next = node2
node1.next = node2.next
node2.next = node1
// 只需移动temp指针
temp = node1
}
return dummyNode.next
};