思考如何深層拷貝一個(gè)鏈表?
1.首先for循壞拷貝就鏈表的每個(gè)結(jié)點(diǎn),然后掛鉤,將新舊結(jié)點(diǎn)連起來。
2.拷貝舊結(jié)點(diǎn)的指向random. for循壞拷貝每個(gè)舊節(jié)點(diǎn)的指向給新結(jié)點(diǎn)。
3。拆開,將新舊鏈表拆開來,返回新鏈表的頭結(jié)點(diǎn)。
再for循壞依次打印結(jié)點(diǎn)。

成都創(chuàng)新互聯(lián)公司成立與2013年,先為萬秀等服務(wù)建站,萬秀等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為萬秀企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
```public class CNode {
int val;
CNode next = null;
CNode random = null;
CNode(int val) {
this.val = val;
}
public String toString() {
return String.format("CNode(%d)", val);
}}
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();//定義一個(gè)Solution類的作為接受的變量
testComplexListCopy(solution);
}
/**
* 1. 構(gòu)建幾組測試數(shù)據(jù)
* 2. 進(jìn)行測試
* 3. 對測試結(jié)果進(jìn)行打印
* @return
*/
private static void testComplexListCopy(Solution solution) {
// 1. 構(gòu)建測試數(shù)據(jù)
CNode head = createComplexList1();
// 2. 進(jìn)行測試
CNode resultHead = solution.copy(head);//solution是Solution類下的變量,自然可以調(diào)用Solution類下的方法copy
// 3. 對測試結(jié)果進(jìn)行打印
printCList(resultHead);
}
// CNode 必須有一個(gè)構(gòu)造方法,形參是 int val
// 并且,初始化后,next 和 random 都是 null
private static CNode createComplexList1() {
CNode n1 = new CNode(1);
CNode n2 = new CNode(2);
CNode n3 = new CNode(3);
CNode n4 = new CNode(4);
n1.random = n3; n2.random = n1; n3.random = n3;
n1.next = n2; n2.next = n3; n3.next = n4;
return n1;
}
// CNode 必須實(shí)現(xiàn)一個(gè) String toString() 方法
private static void printCList(CNode head) {
for (CNode cur = head; cur != null; cur = cur.next) {
System.out.print(cur + " --> ");
}
System.out.println();
}}
public class Solution {
CNode copy(CNode head) {//copy是Solution類下的方法
if (head == null) {
return null;
}
CNode p1 = head;
while (p1 != null) {//新舊掛鉤
CNode p2 = new CNode(p1.val);//拷貝結(jié)點(diǎn)
p2.next = p1.next;
p1.next = p2;
p1 = p2.next;
}
p1 = head;
while (p1 != null) {//復(fù)制指向 讓新的1指向新的2
CNode p2 = p1.next;
if (p1.random != null) {
p2.random = p1.random.next;
}
p1 = p2.next;
}
p1 = head;
CNode newHead = head.next;//創(chuàng)造新鏈表的頭結(jié)點(diǎn)
while (p1 != null) {//拆開新舊
CNode p2 = p1.next;
p1.next = p2.next;
if (p2.next != null) {
p2.next = p2.next.next;
}
p1 = p1.next;//相當(dāng)于更新cur
}
return newHead;
}}
網(wǎng)頁名稱:鏈表的深層拷貝,拷貝結(jié)點(diǎn)及結(jié)點(diǎn)的指向
新聞來源:http://chinadenli.net/article4/jpscoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、定制網(wǎng)站、ChatGPT、云服務(wù)器、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)