将给定的链表中每两个相邻的节点交换一次,返回链表的头指针
例如,
给出1->2->3->4,你应该返回链表2->1->4->3。
你给出的算法只能使用常量级的空间。你不能修改列表中的值,只能修改节点本身。
思路:这个应该没什么特别的,记录pre和next就行吧
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
*
* @param head ListNode类
* @return ListNode类
*/
func swapPairs( head *ListNode ) *ListNode {
// write code here
newHead := new(ListNode)
newHead.Next = head
pre := newHead
for head != nil {
//确定有k个节点,并找到k个节点的下一个节点
next := head
for i := 0; i < 2; i++ {
if next == nil {
return newHead.Next
}
next = next.Next
}
head = next
//旋转节点
node := pre.Next
for i := 0; i < 2; i++ {
tmpNode := node.Next
node.Next = next
next = node
if i != 1 {
node = tmpNode
}
}
tmpNode := pre.Next
pre.Next = node
pre = tmpNode
}
return newHead.Next
}