Swift-鏈表分割

題目:以給定值x為基準(zhǔn)將鏈表分割成兩部分,所有小于x的結(jié)點(diǎn)排在大于或等于x的結(jié)點(diǎn)之前
給定一個(gè)鏈表的頭指針 ListNode* pHead,請(qǐng)返回重新排列后的鏈表的頭指針.

解法1

通過(guò)x分割成兩個(gè)前后兩個(gè)鏈表,然后兩個(gè)鏈表進(jìn)行合并.
<pre><code>` func partitionListNode(node:ListNode,x:Int) -> ListNode {

    var beforeStart:ListNode?
    var beforeEnd:ListNode?
    
    var afterStart:ListNode?
    var afterEnd:ListNode?
    
    var listNode:ListNode? = node
    
    while listNode != nil {
        let next:ListNode? = listNode?.next
        
        let value:Int = Int((listNode?.value)!)!
        
        if value < x {
            if beforeStart == nil { // 插入beforeStart之后
                beforeStart = listNode
                beforeEnd = listNode
            } else {
                beforeEnd?.next = listNode
                beforeEnd = listNode
            }
        } else {
            if afterStart == nil { // 插入afterStart之后
                afterStart = listNode
                afterEnd = listNode
            } else {
                afterEnd?.next = listNode
                afterEnd = listNode
            }
        }
        listNode = next
    }
    
    if beforeStart == nil {
        return afterStart!
    }
    
    beforeEnd?.next = afterStart
    
    return beforeStart!
}`</code></pre>

解法2

第一種解決方案,變量太多,而且不容易控制,可以進(jìn)行簡(jiǎn)化為兩個(gè)鏈表的節(jié)點(diǎn),不過(guò)最后進(jìn)行兩個(gè)合并的時(shí)候需要遍歷前一個(gè)鏈表.
<pre><code>` func partitionListNode2(node:ListNode,x:Int) -> ListNode {

    var beforeStart:ListNode?
    var afterStart:ListNode?
    
    var listNode:ListNode? = node
    
    while listNode != nil {
        let next:ListNode? = listNode?.next
        let value:Int = Int((listNode?.value)!)!
        
        if value < x {
            listNode?.next = beforeStart
            beforeStart = listNode
        } else {
            listNode?.next = afterStart
            afterStart = listNode
        }
        
        listNode = next
    }
    
    if beforeStart == nil {
        return afterStart!
    }
    
    
    let head:ListNode = beforeStart!
    
    while beforeStart?.next != nil { // 找到beforeStart的最后節(jié)點(diǎn)
        beforeStart = beforeStart?.next
    }
    
    beforeStart?.next = afterStart
    
    return head
}`</code></pre>

測(cè)試代碼:
<pre><code>`listNodeManger.headNode = nil

listNodeManger.appendToTail(value: "(1)")
listNodeManger.appendToTail(value: "(3)")
listNodeManger.appendToTail(value: "(5)")
listNodeManger.appendToTail(value: "(2)")
listNodeManger.appendToTail(value: "(4)")
listNodeManger.appendToTail(value: "(6)")
listNodeManger.appendToTail(value: "(8)")
listNodeManger.appendToTail(value: "(7)")
listNodeManger.appendToTail(value: "(9)")

listNodeManger.printListNode(headNode: listNodeManger.headNode!)
print("FlyElephant--鏈表切分1")
var partitionHeadNode:ListNode = listNodeManger.partitionListNode(node: listNodeManger.headNode!, x: 5)
listNodeManger.printListNode(headNode: partitionHeadNode)
print("FlyElephant--鏈表切分2")
partitionHeadNode = listNodeManger.partitionListNode2(node: listNodeManger.headNode!, x: 5)
listNodeManger.printListNode(headNode: partitionHeadNode)`</code></pre>

FlyElephant.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //leetcode中還有花樣鏈表題,這里幾個(gè)例子,冰山一角 求單鏈表中結(jié)點(diǎn)的個(gè)數(shù)----時(shí)間復(fù)雜度O(n)這是最...
    暗黑破壞球嘿哈閱讀 1,653評(píng)論 0 6
  • B樹(shù)的定義 一棵m階的B樹(shù)滿(mǎn)足下列條件: 樹(shù)中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,675評(píng)論 0 25
  • 轉(zhuǎn)載請(qǐng)注明出處:http://www.itdecent.cn/p/c65d9d753c31 在上一篇博客《數(shù)據(jù)結(jié)構(gòu)...
    Alent閱讀 3,595評(píng)論 4 74
  • 大學(xué)的時(shí)候不好好學(xué)習(xí),老師在講臺(tái)上講課,自己在以為老師看不到的座位看小說(shuō),現(xiàn)在用到了老師講的知識(shí),只能自己看書(shū)查資...
    和玨貓閱讀 1,548評(píng)論 1 3
  • 前言 本文是題主準(zhǔn)備面試時(shí)記錄下的筆記整理而來(lái),稍顯粗陋,還請(qǐng)各位擼友勿噴哈! Topic 目錄數(shù)組字符串鏈表二叉...
    rh_Jameson閱讀 1,664評(píng)論 1 10

友情鏈接更多精彩內(nèi)容