Swift 链表删除重复项
Posted
技术标签:
【中文标题】Swift 链表删除重复项【英文标题】:Swift Linked List Remove Duplicates 【发布时间】:2017-07-17 04:45:00 【问题描述】:我写了下面的程序来从链表中删除重复项,
下面是包含节点类和通过遍历链表删除重复的方法的代码。
在方法 removeDuplicates
中,但是当我执行时它失败了,而 ( cur != nil )
检查,当更改为 cur.link != nil
时将工作但输出不正确。
import UIKit
class LinkedList
class Node
var data:Int
var link: Node?
init(data: Int = 0 )
self.data = data
self.link = nil
func disp(n: Node?) -> String
var text = String()
var node = n
while node != nil
text += "\(node!.data)"
node = node?.link
if node != nil
text += "--->"
return text
func removeDuplicatesNode( head : Node?) -> Node?
var cur = head
var prev:Node? = nil
let s = NSMutableSet()
while ( cur != nil )
let val:Int = cur!.data
if( s.contains(val))
prev?.link = cur?.link!
else
s.add(val)
prev = cur
print(cur)
cur = cur?.link
return head!
var list = LinkedList()
var removeDuplicates = LinkedList.Node(data: 1)
removeDuplicates.link = LinkedList.Node(data: 2)
removeDuplicates.link?.link = LinkedList.Node(data: 3)
removeDuplicates.link?.link?.link = LinkedList.Node(data: 3)
print("Remove Duplicates " + list.disp(n: (list.removeDuplicatesNode(head: removeDuplicates))))
【问题讨论】:
【参考方案1】:请查看更新后的 removeDuplicateNode() 函数。我用 nil 条件更新了代码。
func removeDuplicatesNode( head : Node?) -> Node?
var cur = head
var prev:Node? = nil
let s = NSMutableSet()
while ( cur != nil )
let val:Int = cur!.data
if( s.contains(val))
if cur?.link != nil // Check for last Node
prev?.link = cur?.link!
else
prev?.link = nil // If last node then assign nil value to the prev node's link
else
s.add(val)
prev = cur
print(cur!)
cur = cur?.link
return head!
谢谢
【讨论】:
以上是关于Swift 链表删除重复项的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:在 uitableviewcell 中删除重复项/将它们分组为 1