Swift - LeetCode - 两两交换链表中的节点

题目

两两交换链表中的节点

问题:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

说明:

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解题思路:

我们首先需要建立dummy节点、pre、current、next和post四个指针即可。

示例:

输入: 1->2->3->4
输出: 2->1->4->3
代码:
/**
public class SingNode {
    public var value : Int
    public var nextNode: SingNode?
    
    public init(value:Int) {
        self.value = value
    }
}
 **/
    func swapTwoNode(_ l1: SingNode?) -> SingNode? {
        if l1 == nil {
            return nil
        }
        
        let dummyNode = SingNode.init(value: 0)
        dummyNode.nextNode = l1
        var pre = dummyNode
        var current = dummyNode.nextNode
        
        while current != nil && current?.nextNode != nil {
            let next = current?.nextNode
            let post = current?.nextNode?.nextNode
            
            pre.nextNode = next
            next?.nextNode = current
            current?.nextNode = post
            
            pre = current!
            current = post

        }
        
        return dummyNode.nextNode
    }
    

你可能感兴趣的:(Swift - LeetCode - 两两交换链表中的节点)