[英]Indexed singly linked list
我想創建一個單鏈表。 我已經有一個不允許在其上建立索引的實現。 我想添加此功能,但是我不確定該怎么做。
因此,基本上頭應該具有索引“ 1”。 但是我無法弄清楚自己應該如何在If語句中將索引每增加1
。
void AddNode (int addData)
{
nodePtr NewNode = new node;
NewNode->next = NULL;
NewNode->data = addData;
if (head != NULL)
{
curr = head;
while(curr->next != NULL)
{
curr = curr->next;
}
curr->next = NewNode;
NewNode->index;
}
else
{
head = NewNode;
NewNode->index = 1;
}
}
您是說能夠通過get(index)獲得鏈接列表節點等功能?
另外,您的頭部不應該具有索引1,它應該為0。這不符合從零開始的標准索引編制方法。
鏈表在技術上沒有索引,也不應存儲索引。 似乎鏈表可能不是您正在執行的操作的正確數據結構,但是您可以使用這樣的循環將其視為這樣(請注意,如果我的c ++語法生銹)
int get(int index) {
Node current = head;
for (int x = 0; x < index; x++) {
if (current->next == null) {
//some sort of error handling for index out of bounds
} else {
current = current->next;
}
}
return current->data
}
get(2)將返回列表的第三個元素。
結構圖為什么要將其添加到列表的末尾? 只需將新節點添加到最前面即可。
我認為沒有必要遵循1,2,3的順序。。。相反,您可以反向進行。在添加新節點之前,請訪問頭並找到其索引(i)。 當您添加新的索引時,該索引的索引將為i + 1。
有兩個優點:-遍歷此列表時,它不會改變任何內容。 -您知道已添加到此列表中的數量。
所以,你真的想要做的是增加的能力鏈表的索引元素。
無需將索引實際存儲在任何地方(因為您實際上並不存儲array/vector
元素的索引,因為類型和數組第一個元素的地址就是檢索第i-th
元素所需要的一切)。
你想保留的唯一信息是因為計算是昂貴的,因為你必須從遍歷列表列表的長度head
到tail
每次你需要它的時候。 獲得此信息后, addNode
僅應更新列表的size
。
如您所知,訪問鏈表i-th
元素也很昂貴(與向量相比),但是很容易編寫代碼。
類似於以下內容的東西應該起作用:
void get(Node* head, size_t pos) {
while (head && pos--)
head = head->next;
return pos<=0 ? head : nullptr ;
}
它head
開始遍歷列表,直到到達末尾( head
為nullptr
)或pos
<=0
。 一旦您退出循環,如果pos>0
表示列表比pos
短,則可以返回head
(這將指向pos-th
元素)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.