题目:
解题思路:
这是个套路题
对下面的六步进行循环执行
1.n1=p.next
2.n2=p.next.next
3.p.next=n2
4.n1.next=n2.next
5.n2.next=n1
6.p=n1,此时3和4已经调换了位置
7.再重复一轮(重复上面六步操作) n1=p.next
8.n2=p.next.next
9.p.next=n2
10.n1.next=n2.next(x代表空)
11.n2.next=n1
12.最后p=n1,发现5和6也发生了交换,实现了单向链表两两交换。
当n1 n2一开始在1、2节点的时候:
1.增加if语句对n1,n2在1、2处进行判断
2.增加dummy节点,但在retrun时要注意.要return dummy.next,因为dummy节点指向的0节点不存在于原来链表。
代码:(dummy的实现方法)
/**
* 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 dummy=new ListNode();
dummy.next=head;
let current=dummy;
while(current.next!==null&¤t.next.next!==null)
{
let n1=current.next;
let n2=current.next.next;
current.next=n2;
n1.next=n2.next;
n2.next=n1;
current=n1;
}
return dummy.next;
};