我想實現一個數據結構類的鏈表,我在搜索部分的算法有一些困難。C++鏈接列表實現崩潰
下面是有問題的代碼,我試圖實現以下僞代碼在MIT算法導論文字:
//
// Method searches and retrieves a specified node from the list
//
Node* List::getNode(unsigned position)
{
Node* current = m_listHead;
for(unsigned i = m_listSize-1; (current != 0) && (i != position); --i)
current = current->next;
return current;
}
在程序中的該點的頭部是4節點,包含int 5的值。問題出現在for循環的主體中,其中指向節點對象的指針被分配給下一個節點。但是這超出了節點的頭部,所以它基本上指向了內存中的某個隨機位置(這是有道理的)。
在這種情況下算法不應該移動到前一個節點而不是下一個節點?下面是僞代碼:
LIST-SEARCH(L, k)
x <- head
while x != NIL and key != k
do x <- next[x]
return x
另外,這裏是我的鏈接列表實現的頭文件。我還沒有嘗試實現它的模板形式還只是爲了讓事情變得簡單:
#ifndef linkList_H
#define linkList_h
//
// Create an object to represent a Node in the linked list object
// (For now, the objects to be put in the list will be integers)
//
struct Node
{
// nodes of list will be integers
int number;
// pointer to the next node in the linked list
Node* next;
};
//
// Create an object to keep track of all parts in the list
//
class List
{
public:
// Contstructor intializes all member data
List() : m_listSize(0), m_listHead(0) {}
// methods to return size of list and list head
Node* getListHead() const { return m_listHead; }
unsigned getListSize() const { return m_listSize; }
// method for adding a new node to the linked list,
// retrieving and deleting a specified node in the list
void addNode(Node* newNode);
Node* getNode(unsigned position);
private:
// member data consists of an unsigned integer representing
// the list size and a pointer to a Node object representing head
Node* m_listHead;
unsigned m_listSize;
};
#endif
ADDNODE方法的實現:
//
// Method adds a new node to the linked list
//
void List::addNode(Node* newNode)
{
Node* theNode = new Node;
theNode = newNode;
theNode->next;
m_listHead = theNode;
++m_listSize;
}
是List雙鏈表?在內存中看起來如何? – Dave
我認爲這個問題可能在addNode成員函數中。請提供該代碼,以便我們確保列表構建正確。 –
上面提供的代碼。 – dtg