解题思路
迭代法和递归法我认为从本质上看,递归法是“先归纳,后解决”,迭代法则是“先解决,后归纳”。
所以这个题其实也就是两个两个解决,直至遍历整个链表。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function (head) {
let hypNode = new ListNode(0);
//构造虚拟的头节点
hypNode.next = head;
//将虚拟头节点的指针指向head。
let nowNode = hypNode;
//运动指针。
while(nowNode.next != null && nowNode.next.next != null){
let node1 = nowNode.next;
//node1储存前面的节点,node2储存后面的节点。
node2 = nowNode.next.next;
nowNode.next = node2;
node1.next = node2.next;
node2.next = node1;
//nownode→node1→node2→node3
//nownode→node2→node1→node3
//先把虚拟头节点指向node2,再把node1的指针指向node2下一个
//再把node2的指针指向node1,构建了上面第二个链表,然后执行
//下面的更新指针,把指针移动到node3前面(可视为虚拟头节点)。
nowNode = node1;
//更新运动指针。
}
return hypNode.next;
};