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

Ios Swift:删除图像数组中的重复项

swift 删除排序数组中的重复项

c_cpp 给定一个已排序的链表,删除所有重复项,使每个元素只出现一次。

LeetCode刷题83-简单-删除有序链表的重复项

LeetCode刷题83-简单-删除有序链表的重复项