劍指Offer 複雜鍊錶的複製 Java

2021-09-12 18:33:13 字數 1584 閱讀 9773

複雜鍊錶的複製 -- newcoder 劍指offer 25

* 輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向

* 任意乙個節點),返回結果為複製後複雜鍊錶的head。

* (注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

* 1、複製原鍊錶的每個節點 a->b->c =>a->a'->b->b'->c->c' 

* * 2、a'等 根據a的sibling指向 分別指向正確的位置

* * 3、拆分鍊錶,偶數序號元素拆出來 組成新鍊錶

package com.my.test.codinginterviews.tree;

/** * 題目:

* 複雜鍊錶的複製 -- newcoder 劍指offer 25

* * 題目描述:

* 輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向

* 任意乙個節點),返回結果為複製後複雜鍊錶的head。

* (注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

*/public class randomlistnodecopy

@override

public string tostring()

return this.label + "->" + this.next.tostring() +

(this.random == null ? "" : "(" + this.random.label + ")");}}

/*** 思路:

* 1、複製原鍊錶的每個節點 a->b->c =>a->a'->b->b'->c->c'

* * 2、a'等 根據a的random指向 分別指向正確的位置

* * 3、拆分鍊錶,偶數序號元素拆出來 組成新鍊錶

*/public randomlistnode clone(randomlistnode phead)

// 複製next指標

randomlistnode curnode = phead;

while (curnode != null)

// 複製random指標

curnode = phead;

while (curnode != null)

curnode = nextcurnode;

}// 返回偶數序號元素組成的鍊錶

curnode = phead;

randomlistnode newnode = phead.next;

while (curnode != null)

curnode = curnode.next;

}return newnode;

}public static void main(string args)

private static randomlistnode createtestlinkedlist(int n, randomlistnode addnode)

}curnode.next = addnode;

return head;

}}

劍指offer複雜鍊錶複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 我的 思路比較笨,就是首先構造乙個正常的不大random指標的鍊錶,然後再去遍歷...

劍指offer 複雜鍊錶複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 1 複製每個節點,如 複製節點a得到a1,將a1插入節點a後面 2 遍歷鍊錶,a...

劍指offer 複雜鍊錶複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 非遞迴方法 struct randomlistnode randomlistno...