美文网首页Swift - LeetCode程序员Swift in LeetCode
Swift - LeetCode - 删除链表中的节点

Swift - LeetCode - 删除链表中的节点

作者: 依赖糊涂 | 来源:发表于2019-03-04 09:57 被阅读3次

    题目

    删除链表中等于给定值 val 的所有节点。

    问题:

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

    示例:

    示例 1:     
    输入: 1->2->3->3->4->4->5,val = 1
    输出:2->3->3->4->4->5
    
    示例 2:     
    输入: 1->1->1->2->3,val = 2
    输出: 1->1->1->3
    

    解题思路:

    只需判断节点的值是否与给出的值相等,删除即可。不过需要考虑到,删除头结点的问题,需要一个头指针来指向头结点,所以设立dummy节点;还需知道,每个节点的前驱,方便删除后的连接。

    代码:
    /**
    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 removeCurrentValue(_ l1: SingNode?, value:Int) -> SingNode? {
            if l1 == nil {
                return nil
            }
            
            let dummyNode = SingNode.init(value: 0)
            dummyNode.nextNode = l1
            var node = dummyNode
            
            while node.nextNode != nil {
                if node.nextNode?.value == value  {
                    node.nextNode = node.nextNode?.nextNode
                }
                if node.nextNode !=  nil {
                    node = node.nextNode!
                }
            }
            
            return dummyNode.nextNode
        }
        
    

    相关文章

      网友评论

        本文标题:Swift - LeetCode - 删除链表中的节点

        本文链接:https://www.haomeiwen.com/subject/kglbuqtx.html