時間限制: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指標的節點,之後...