我們常用的鍊錶基本都是單鏈表和雙向鍊錶,兩種鍊錶不同在於雙向鍊錶比單鏈表多了乙個指向當前節點的前乙個節點的指標域。而複雜鍊錶,相比單鏈表多了乙個指向任意位置的隨機域。複雜鍊錶的結構如下:
struct complexnode
};
因為多了乙個隨機域指標,所以導致了複製該鍊錶時因為隨機域的難以控制而使複製過程變得複雜。下面就來看看複雜鍊錶的複製
首先,我們在每乙個節點的後面插入乙個新節點,每乙個新節點的值與前乙個節點的值相同。然後,讓每乙個新節點的隨機域指向與每乙個對應位置上的舊節點的隨機域指向相同。
即拷貝乙份新的複雜鍊錶
拷貝成功之後,再把新的鍊錶拆分出來。由此,複雜鍊錶的複製完成。
// 複雜鍊錶的複製
complexnode* copycomplexnode(complexnode* phead)
complexnode* pcur = phead;
// 在每乙個節點後插入新節點——>拷貝節點並連線
complexnode* newnode =
null;
while (pcur)
// 鏈結隨機指標域
pcur = phead;
while (pcur)
// 拆分節點
newnode = phead->_next;
complexnode* tail = newnode;
phead->_next = newnode->_next;
pcur = phead->_next;
while (pcur)
return newnode;
}
鏈表面試題3 複雜鍊錶
struct clnode 複雜鍊錶 clnode,clpnode,cllist,clplist clpnode clbuynode datatype d clplist data d clplist next null clplist random null return clplist void...
資料結構之鏈表面試題 複雜鍊錶的複製
pragma once define crt secure no warnings 1 include include include typedef int datatype typedef struct complexlistnode complexlistnode,pcomplexlistno...
鍊錶及鏈表面試題
首先看一下順序表和煉表的優缺點,分別在什麼場景下使用?源 list.h ifndef list h define list h include include include typedef int datatype typedef struct node node,pnode,plist init...