题目
两两交换链表中的节点
问题:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
解题思路:
我们首先需要建立dummy节点、pre、current、next和post四个指针即可。
示例:
输入: 1->2->3->4
输出: 2->1->4->3
代码:
/**
public class SingNode {
public var value : Int
public var nextNode: SingNode?
public init(value:Int) {
self.value = value
}
}
**/
func swapTwoNode(_ l1: SingNode?) -> SingNode? {
if l1 == nil {
return nil
}
let dummyNode = SingNode.init(value: 0)
dummyNode.nextNode = l1
var pre = dummyNode
var current = dummyNode.nextNode
while current != nil && current?.nextNode != nil {
let next = current?.nextNode
let post = current?.nextNode?.nextNode
pre.nextNode = next
next?.nextNode = current
current?.nextNode = post
pre = current!
current = post
}
return dummyNode.nextNode
}