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
    }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容