題目
給定一個(gè)排序鏈表,刪除所有含有重復(fù)數(shù)字的節(jié)點(diǎn),只保留原始鏈表中 沒(méi)有重復(fù)出現(xiàn) 的數(shù)字。
問(wèn)題:
給定一個(gè)排序鏈表,刪除所有重復(fù)的元素,使得每個(gè)元素只出現(xiàn)一次。
示例:
示例 1:
輸入: 1->2->3->3->4->4->5
輸出: 1->2->5
示例 2:
輸入: 1->1->1->2->3
輸出: 2->3
解題思路:
設(shè)立dummy節(jié)點(diǎn)來(lái)刪除所有包有重復(fù)數(shù)據(jù)的節(jié)點(diǎn)
代碼:
/**
public class SingNode {
public var value : Int
public var nextNode: SingNode?
public init(value:Int) {
self.value = value
}
}
extension SingNode : CustomStringConvertible {
public var description: String {
var string = "\(value)"
var node = self.nextNode
while node != nil {
string = string + " -- " + "\(node!.value)"
node = node?.nextNode
}
return string
}
}
**/
func removeAllSameNode(_ l1 : SingNode?) -> SingNode? {
if l1?.nextNode == nil || l1 == nil {
return l1
}
let dummyNode = SingNode.init(value: 0)
dummyNode.nextNode = l1
var node = dummyNode
while node.nextNode != nil && node.nextNode?.nextNode != nil{
if node.nextNode?.value == node.nextNode?.nextNode?.value {
let value = node.nextNode?.value
while node.nextNode != nil && value == node.nextNode?.value {
node.nextNode = node.nextNode?.nextNode
}
} else {
node = node.nextNode!
}
}
return dummyNode.nextNode
}