最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)結(jié)構(gòu)之復雜鏈表的拷貝

 更新時間:2021年11月03日 14:23:46   作者:i_Crave  
復雜鏈表指的是一個鏈表有若干個結(jié)點,每個結(jié)點有一個數(shù)據(jù)域用于存放數(shù)據(jù),還有兩個指針域,其中一個指向下一個節(jié)點,還有一個隨機指向當前復雜鏈表中的任意一個節(jié)點或者是一個空結(jié)點。今天我們要實現(xiàn)的就是對這樣一個復雜鏈表復制產(chǎn)生一個新的復雜鏈表

題目:

給你一個長度為 n 的鏈表,每個節(jié)點包含一個額外增加的隨機指針 random ,該指針可以指向鏈表中的任何節(jié)點或空節(jié)點。

構(gòu)造這個鏈表的 深拷貝。 深拷貝應(yīng)該正好由 n 個 全新 節(jié)點組成,其中每個新節(jié)點的值都設(shè)為其對應(yīng)的原節(jié)點的值。新節(jié)點的 next 指針和 random 指針也都應(yīng)指向復制鏈表中的新節(jié)點,并使原鏈表和復制鏈表中的這些指針能夠表示相同的鏈表狀態(tài)。復制鏈表中的指針都不應(yīng)指向原鏈表中的節(jié)點 。

例如,如果原鏈表中有 X 和 Y 兩個節(jié)點,其中 X.random --> Y 。那么在復制鏈表中對應(yīng)的兩個節(jié)點 x 和 y ,同樣有 x.random --> y 。

返回復制鏈表的頭節(jié)點。

struct Node {

int val;

struct Node *next;

struct Node *random;

};

思路:

因為每個節(jié)點還有一個隨機指針,向拷貝標準單向鏈表的方式才處理,是有困難的;

第一步,先將拷貝的節(jié)點鏈在原節(jié)點后面

    struct Node* cur = head;
	while (cur)
	{
		struct Node* new = (struct Node*)malloc(sizeof(struct Node));
		new->val = cur->val;
 
		new->next = cur->next;
		cur->next = new;
 
		cur = new->next;
	}

第二步,處理隨機指針,因為拷貝的就在原節(jié)點后面,拷貝的隨機指針就指向原節(jié)點隨機指針的后一個;

    struct Node* cur = head;    
    while (cur)
	{
		struct Node* copy = cur->next;
		if (cur->random == NULL)
		{
			copy->random = NULL;
		}
		else
		{
			copy->random = cur->random->next;
		}
		cur = copy->next;
	}

第三步,將鏈表分開,并返回拷貝鏈表的頭;

程序:

struct Node* copyRandomList(struct Node* head)
{
    if (head == NULL)
	{
		return NULL;
	}
	struct Node* cur = head;
	while (cur)
	{
		struct Node* new = (struct Node*)malloc(sizeof(struct Node));
		new->val = cur->val;
 
		new->next = cur->next;
		cur->next = new;
 
		cur = new->next;
	}
 
	cur = head;
	
	while (cur)
	{
		struct Node* copy = cur->next;
		if (cur->random == NULL)
		{
			copy->random = NULL;
		}
		else
		{
			copy->random = cur->random->next;
		}
		cur = copy->next;
	}
 
	cur = head;
	struct Node* copyHead = head->next ,*copy_n=copyHead->next,*copy=copyHead;
	while (cur)
	{
		if (copy_n == NULL)
		{
			copy->next = NULL;
			cur->next = NULL;
			return copyHead;
		}
		else
		{
			cur->next = copy_n;
			copy->next = copy_n->next;
		}
		cur = copy_n;
		copy = copy_n->next;
		copy_n = copy->next;
	}
	return copyHead;
}

到此這篇關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)之復雜鏈表的拷貝的文章就介紹到這了,更多相關(guān)C語言 數(shù)據(jù)結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言詳細講解通過遞歸實現(xiàn)掃雷的展開

    C語言詳細講解通過遞歸實現(xiàn)掃雷的展開

    windows自帶的游戲《掃雷》是陪伴了無數(shù)人的經(jīng)典游戲,本文將利用C語言實現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細,感興趣的可以學習一下
    2022-05-05
  • C++常量詳解二(常量形參,常量返回值,常量成員函數(shù))

    C++常量詳解二(常量形參,常量返回值,常量成員函數(shù))

    這篇文章主要介紹了C++常量詳解二(常量形參,常量返回值,常量成員函數(shù)),需要的朋友可以參考下
    2017-06-06
  • C語言實現(xiàn)BMP圖像開運算處理

    C語言實現(xiàn)BMP圖像開運算處理

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)BMP圖像開運算處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言實現(xiàn)井字棋詳解

    C語言實現(xiàn)井字棋詳解

    這篇文章主要為大家介紹了C語言如何實現(xiàn)井字棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C++中map 字典的基本使用教程

    C++中map 字典的基本使用教程

    Map是字典一樣的數(shù)據(jù)結(jié)構(gòu),它是(鍵,值)對的關(guān)聯(lián)數(shù)組,其中每個唯一鍵僅與單個值相關(guān)聯(lián),下面這篇文章主要給大家介紹了關(guān)于C++中map 字典的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • C語言數(shù)組實現(xiàn)公交車管理系統(tǒng)

    C語言數(shù)組實現(xiàn)公交車管理系統(tǒng)

    這篇文章主要介紹了C語言數(shù)組實現(xiàn)公交車管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Qt5實現(xiàn)qDebug日志信息寫入日志文件過程

    Qt5實現(xiàn)qDebug日志信息寫入日志文件過程

    這篇文章主要為大家介紹了Qt5實現(xiàn)qDebug日志信息寫入日志文件的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 利用C++實現(xiàn)最長公共子序列與最長公共子串

    利用C++實現(xiàn)最長公共子序列與最長公共子串

    這篇文章主要給大家介紹了如何利用C++實現(xiàn)最長公共子序列與最長公共子串,文章一開始就給大家簡單的介紹了什么是子序列,子串應(yīng)該比較好理解就不用多介紹了,人后通過算法及示例代碼詳細介紹了C++實現(xiàn)的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • QT實現(xiàn)FTP上傳文件

    QT實現(xiàn)FTP上傳文件

    這篇文章主要為大家詳細介紹了QT實現(xiàn)FTP上傳文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言 數(shù)據(jù)結(jié)構(gòu)之鏈表實現(xiàn)代碼

    C語言 數(shù)據(jù)結(jié)構(gòu)之鏈表實現(xiàn)代碼

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)之鏈表實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論

炉霍县| 自治县| 缙云县| 陇川县| 汉中市| 佛冈县| 江津市| 隆德县| 依兰县| 阳春市| 伊通| 澜沧| 泸西县| 涿鹿县| 瑞安市| 通城县| 新疆| 克拉玛依市| 潼南县| 丰顺县| 和硕县| 洛阳市| 大埔县| 云浮市| 昌平区| 林周县| 塘沽区| 颍上县| 伊吾县| 乡宁县| 邹平县| 仙居县| 南木林县| 郓城县| 楚雄市| 监利县| 锦州市| 浏阳市| 仙桃市| 修文县| 文登市|