九度 題目1524 複雜鍊錶的複製

2021-06-22 04:03:22 字數 1881 閱讀 9007

時間限制:1 秒

記憶體限制:128 兆

特殊判題:否

提交:342

解決:170

題目描述:輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點)。

輸入:輸入可能包含多個測試樣例,輸入以eof結束。

對於每個測試案例,輸入的第一行為乙個整數n (1<=n<=1000):n代表將要輸入的鍊錶元素的個數。(節點編號從1開始)。

接下來有n個數,表示鍊錶節點中的值。

接下來有n個數ti,ti表示第i個節點的另乙個指標指向。

ti = 0 表示這個指標為null。

輸出:對應每個測試案例,

輸出n行,每行有二個數,第乙個代表當前節點值,第二個代表當前節點的特殊指標的值。

樣例輸入:

5

1 2 3 4 5

3 5 0 2 0

樣例輸出:

1 3

2 53 0

4 25 0

分析:這題是考察細心程度的。本題可以拿空間來換取時間,但有另外一種思路,即:

(1)在每個結點n之後轉殖(複製)乙個結點n',並把n'鏈結到n的後面作為n的後繼結點,先不處理其psibling指標,處理複製節點的同時把psilbing指標賦值為null。如圖:

(2)現在處理每個轉殖(複製)結點的psibling指標,如若原結點n的psibling指標指向結點s,則,n'的psibling指標指向結點s的pnext結點。如圖:

(3)現在就要把結點從原煉表中拆分開來,我們可以看到奇數字是原鍊錶中原有的結點,偶數字是轉殖(複製)的結點,注意:如果帶有頭結點的話,pclonehead要申請分配乙個空間,其餘處理與不帶頭結點類似。如圖:

我寫的是帶頭結點的,與上圖有稍微差別,注意理解!

#include #include #include using namespace std;

struct link_node

};void clone_node(link_node* phead)

}void connectsiblingnode(link_node* phead)

}link_node* reconnetclonelink(link_node* phead)

while(pnode != null)

return pclonehead;

}void delete_link(link_node* phead)

}void print_clonelink(link_node* phead)

delete_link(phead);

}void clone_link(link_node* phead)

int main()

p1 = phead->pnext;

link_node* p2 = p1;

for(i = 0; i < n; ++i)

p1 = p1->pnext;

}clone_link(phead);

delete_link(phead);

}return 0;

}

鍊錶 複雜鍊錶的複製

問題描述 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個next指標指向下乙個結點之外,還有乙個random指向鍊錶中的任意結點或者null。結點的定義如下 struct randomlistnod...

複雜鍊錶複製

複雜鍊錶複製的標頭檔案mlist.h ifndef mlist h define mlist h include include includetypedef int datatype typedef struct node node,pnode,plist pnode crealist datat...

複製複雜鍊錶

題目 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 首先有三種解法 第一種就是中規中矩的解法,首先複製next指標的節點,之後...