/**
* Definition for singly-linked list.
* class ListNode(var _x: Int = 0) {
* var next: ListNode = null
* var x: Int = _x
* }
*/
object Solution {
def swapPairs(head: ListNode): ListNode = {
var h: ListNode = head
var res: ListNode = head
if(h != null && h.next != null){
res = h.next //初始化返回值的头指针
}
while(h != null && h.next != null){
var p1: ListNode = h
var p2: ListNode = h.next
h = p2.next
p2.next = p1 //交换2个相邻节点
p1.next = if(h != null && h.next != null){ //判断下一个节点位置
h.next
}else{
h
}
}
return res
}
}
伪头指针法:
/**
* Definition for singly-linked list.
* class ListNode(var _x: Int = 0) {
* var next: ListNode = null
* var x: Int = _x
* }
*/
object Solution {
def swapPairs(head: ListNode): ListNode = {
var h: ListNode = head //head是val类型,所以需要转变成var方便操作
var pre :ListNode = new ListNode() //产生一个伪头指针,方便操作
pre.next = h
var res: ListNode = pre //res记录伪头指针,因为pre会在循环中改变
while(h != null && h.next != null){
var p1: ListNode = h
var p2: ListNode = h.next
h = p2.next
pre.next = p2
p1.next = p2.next //先指向后面还没遍历的指针,防止遗失
p2.next = p1 //交换2个相邻节点
pre = p1
}
return res.next
}
}