题意:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:
- 从交换链表中两个元素想起,链表位置的变换即链表元素的next属性的变换。交换链表中的两个元素的位置即是将他们的next属性更改
- 现在给定三个链表元素,curren,p1,p2,current指向p1,p1指向p2,交换p1和p2
- 首先让current指向p2,再让p1指向p2.next,再让p2指向p1。然后将current赋值为n1。即不断改变他们的next指向,再让current指针在交换完一对元素后向下移动一位
var swapPairs = function(head) {
let dummy = new ListNode()
dummy.next = head//定义一个虚拟头节点
let current = dummy
while(current.next && current.next.next){//使有两个元素能互换位置
let n1 = current.next
let n2 = current.next.next//起始状态:current指向n1,n1指向n2,交换n1n2指向
current.next = n2
n1.next = n2.next
n2.next = n1
current = n1
}
return dummy.next
};