欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

題目:

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

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

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

返回復(fù)制鏈表的頭節(jié)點(diǎn)。

struct Node {

int val;

struct Node *next;

struct Node *random;

};

思路:

因?yàn)槊總€(gè)節(jié)點(diǎn)還有一個(gè)隨機(jī)指針,向拷貝標(biāo)準(zhǔn)單向鏈表的方式才處理,是有困難的;

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

    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;
	}

第二步,處理隨機(jī)指針,因?yàn)榭截惖木驮谠?jié)點(diǎn)后面,拷貝的隨機(jī)指針就指向原節(jié)點(diǎn)隨機(jī)指針的后一個(gè);

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

相關(guān)文章

  • MFC繪制不規(guī)則窗體的方法

    MFC繪制不規(guī)則窗體的方法

    這篇文章主要介紹了MFC繪制不規(guī)則窗體的方法,涉及MFC窗體操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C++冒泡排序及其優(yōu)化算法

    C++冒泡排序及其優(yōu)化算法

    這篇文章主要為大家介紹了C++冒泡排序及其優(yōu)化算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • VC中使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序簡明教程

    VC中使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序簡明教程

    這篇文章主要介紹了VC中使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序的方法,結(jié)合實(shí)例形式詳細(xì)講述了ADO的原理及VC使用ADO開發(fā)數(shù)據(jù)庫應(yīng)用程序的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • Qt5開發(fā)視頻播放器的項(xiàng)目實(shí)踐

    Qt5開發(fā)視頻播放器的項(xiàng)目實(shí)踐

    Qt對(duì)音視頻的播放和控制、相機(jī)拍攝、收音機(jī)等多媒體應(yīng)用提供了強(qiáng)大的支持,本文主要介紹了Qt5開發(fā)視頻播放器,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • C語言中快速排序和插入排序優(yōu)化的實(shí)現(xiàn)

    C語言中快速排序和插入排序優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了C語言中快速排序和插入排序優(yōu)化的實(shí)現(xiàn),包括雙向劃分快速排序方法的介紹,需要的朋友可以參考下
    2015-11-11
  • C語言自增(++)和自減(--)實(shí)例詳解

    C語言自增(++)和自減(--)實(shí)例詳解

    本篇文章主要介紹了C語言的自增和自減的基本知識(shí),并附有代碼示例,以便大家理解,有需要的朋友可以看下
    2016-07-07
  • C++實(shí)現(xiàn)簡易的彈球小游戲

    C++實(shí)現(xiàn)簡易的彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易的彈球小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++使用正則表達(dá)式的詳細(xì)教程

    C++使用正則表達(dá)式的詳細(xì)教程

    正則表達(dá)式是一個(gè)非常強(qiáng)大的工具,主要用于字符串匹配,下面這篇文章主要給大家介紹了關(guān)于C++使用正則表達(dá)式的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • C語言以數(shù)據(jù)塊的形式讀寫文件實(shí)例代碼

    C語言以數(shù)據(jù)塊的形式讀寫文件實(shí)例代碼

    本文主要介紹C語言中以數(shù)據(jù)塊的形式讀寫文件,這里提供了實(shí)例代碼舉例說明,有需要的小伙伴可以參考下
    2016-07-07
  • 利用Matlab編寫簡易版連連看小游戲

    利用Matlab編寫簡易版連連看小游戲

    連連看作為經(jīng)典的小游戲,一定是很多人的回憶吧。本文將用Matlab實(shí)現(xiàn)這一經(jīng)典的游戲,文中示例代碼具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論