Swift - LeetCode - 分隔链表

题目

分隔链表

问题:

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。

示例:

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

解题思路:

这个题一直把我搞在蒙圈的路上、不知道有没有人和我一样总认为 value =4的节点要放到value =3节点后面。

代码:
/**
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 partition(_ head: SingNode?, _ x: Int) -> SingNode? {
        let prevDummy = SingNode.init(value: 0)
        var prev = prevDummy
        let postDummy = SingNode.init(value: 0)
        var post = postDummy
        
        var node = head

        while node != nil {
            if node!.value < x {
                prev.nextNode = node
                prev = node!
            } else {
                post.nextNode = node
                post = node!
            }
            node = node!.nextNode
        }
        
        post.nextNode = nil
        prev.nextNode = postDummy.nextNode
   
        return prevDummy.nextNode
    }
    

你可能感兴趣的:(Swift - LeetCode - 分隔链表)