題目
兩兩交換鏈表中的節(jié)點(diǎn)
問題:
給定一個鏈表熏迹,兩兩交換其中相鄰的節(jié)點(diǎn)乒躺,并返回交換后的鏈表房铭。
說明:
你的算法只能使用常數(shù)的額外空間榆骚。
你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值掸哑,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換贾虽。
解題思路:
我們首先需要建立dummy節(jié)點(diǎn)杆怕、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
}