Swift-復雜鏈表的復制

題目:輸入一個復雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點).
核心代碼:
<pre><code>`
func randomListNodeClone(headNode:inout RandomListNode?) {
var pHead:RandomListNode? = headNode
// A->B->C 拷貝 A->A1->B->B2->C->C1
while pHead != nil {
let cloneNode:RandomListNode = RandomListNode()
cloneNode.data = (pHead?.data)! + "1"
cloneNode.next = pHead?.next
pHead?.next = cloneNode

        pHead = cloneNode.next
    }
    // sibling 拷貝
    var sHead:RandomListNode? = headNode
    while sHead != nil {
        let nextNode:RandomListNode? = sHead?.next
        if nextNode != nil {
            nextNode!.sibling = sHead?.sibling?.next
        }
        sHead = sHead?.next?.next
    }
    
    // 拆分鏈表
    let cloneHead:RandomListNode? = headNode?.next
    headNode = cloneHead
    var beginNode:RandomListNode? = cloneHead
    while beginNode != nil {
        let temp = beginNode?.next?.next
        if beginNode?.next != nil {
            beginNode?.next = temp
        }
        beginNode = temp
    }
}`</code></pre>

測試代碼:
<pre><code>`

var randomHead:RandomListNode = RandomListNode()
randomHead.data = "A"

var randomNode1:RandomListNode = RandomListNode()
randomNode1.data = "B"
randomHead.next = randomNode1

var randomNode2:RandomListNode = RandomListNode()
randomNode2.data = "C"
randomNode1.next = randomNode2

var randomNode3:RandomListNode = RandomListNode()
randomNode3.data = "D"
randomNode2.next = randomNode3

var randomNode4:RandomListNode = RandomListNode()
randomNode4.data = "E"
randomNode3.next = randomNode4

randomHead.sibling = randomNode2
randomNode1.sibling = randomNode4
randomNode3.sibling = randomNode1

var pHead:RandomListNode? = randomHead
var clone:RandomListClone = RandomListClone()
clone.randomListNodeClone(headNode: &pHead)
while pHead != nil {
print("FlyElephant-隨機節點--(pHead!.data)---??--(pHead!.sibling?.data)")
pHead = pHead?.next
}`</code></pre>


FlyElephant.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 作為一個資深的新手程序員??,鏈表這些既基礎又深奧的東西是日常工作中并不常見,但是卻非常重要,所以就總結一下鏈表的簡...
    Clark_new閱讀 4,280評論 4 12
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,138評論 0 12
  • 大學的時候不好好學習,老師在講臺上講課,自己在以為老師看不到的座位看小說,現在用到了老師講的知識,只能自己看書查資...
    和玨貓閱讀 1,470評論 1 3
  • 本文內容:1、 什么是鏈表?2、 鏈表共分幾類?3、 鏈表的 C 實現! 總表:《數據結構?》 工程代碼 Gith...
    半紙淵閱讀 40,030評論 0 54
  • 是否有那么一瞬間,你覺得這并不是你想要的生活,冷眼旁觀的對那張沒有半點留念的臉說:我要辭職。當這個想法誕生時,恭喜...
    赤尋閱讀 339評論 0 1