Swift - LeetCode - 奇偶链表

题目

奇偶链表

问题:

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

说明:

应当保持奇数节点和偶数节点的相对顺序。
链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。

示例:

示例 1:
     
输入: 1->2->3->4->5->NULL
输出: 1->3->5->2->4->NULL

示例 2:

输入: 2->1->3->5->6->4->7->NULL
输出: 2->3->6->7->1->5->4->NULL

进阶:

请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

解题思路:

建立快慢指针,通过这两个指针获得两个列表,

代码:
/**
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 oddEvenList(_ l1:SingNode?) -> SingNode? {
        if l1 == nil || l1?.nextNode == nil {
            return l1
        }
        var pre = l1
        var last = l1?.nextNode
        let temp = last
        while last != nil && last?.nextNode != nil {
            pre?.nextNode = last?.nextNode
            pre = pre?.nextNode
            last?.nextNode = pre?.nextNode
            last = last?.nextNode
        }
        pre?.nextNode = temp
        return l1
    }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文部分内容,来自于@行者慎思的微信分享,特此感谢。 在近期参加了简书-产品交流微信群组织的一次微信线上分享,@行...
    时凤卫阅读 7,469评论 0 4
  • “请问您要鸡肉饭还是牛肉面?”送餐的实习空乘挨个儿问乘客,她渐渐发现牛肉面剩下很多,而鸡肉饭则供不应求,害怕...
    菲乐阅读 2,713评论 0 4
  • I What通过人际网,约谈合适的人,帮助自己找到好工作 Why可以帮助我们找到合适的好工作 When当好工作空缺...
    冯臻阅读 1,625评论 1 0
  • 8.22 【人民时评】改革图强,四十从容。从容,源自逢山开路、遇水架桥的闯劲,源自滴水穿石、绳锯木断的韧劲【核心句...
    筷子成长日记阅读 1,300评论 0 0
  • 大师兄是一部动作、喜剧电影。陈侠(甄子丹)小时候是德智中学的问题学生,在毕业典礼上,打了获得钢琴比赛一等奖的罗建英...
    韫秋阅读 10,292评论 0 0