2015-04-08 28 views
0

我正在爲我的大學作業寫一個循環列表類,並且我需要實現一個函數,該函數從給定的索引中刪除循環鏈接列表中的節點並返回指向該節點的指針。C++ - 從單個鏈接的圓形列表中的任何索引中刪除一個節點

這是我的節點類。所有功能都正常工作。

struct Node 
{  
    int nData; 
    Node* next; 

    Node(); // Null Constructor 
    Node(int data); // Parameterized Constructor 
    Node(Node& newNode); // Copy constructor 
    ~Node(); // Destructor 
    Node& Print(); // display function 
}; 

這裏是我的節點刪除功能。

Node* CCircleList::removeAt(int index) // remove node at specified index 
{ 
    if (index < 0) 
    { 
     index = 0; 
    } 
    if (index == 0) 
    { 
     return remove(); 
    } 
    else if (index >= count) 
    { 
     demoteIndex(); // tail points to it's predecessor 
     Node* ptr = tail->next; 
     tail->next = ptr->next; 
     ptr->next = NULL; 
     setPosition(0); 
     return ptr; 
    } 
    else if (index = (count - 1)) 
    { 
     promoteIndex(); // tail points to tail->next 
     setPosition(index - 1); // sets Node pointer current to index 
     Node* ptr = current->next; 
     promoteIndex(); 
     current->next = ptr->next; 
     ptr->next = NULL; 
     return ptr; 
    } 
    else 
    { 
     setPosition(index - 1); 
     Node* ptr = current->next; 
     current->next = ptr->next; 
     ptr->next = NULL; 
     return ptr; 
    } 
} 

計數=在列表中的節點的數目。

tail =列表中的最後一個節點。

tail-> next =列表中的第一個節點。

該函數適用於除count-1之外的所有索引,任何幫助將不勝感激。提前致謝。


代碼的其他功能

CCircleList& CCircleList::promoteIndex() // tail points to it's successor 
{ 
    if (!tail) return *this; 
    tail = tail->next; 
    return *this; 
} 
CCircleList& CCircleList::demoteIndex() // tail points to it's predecessor 
{ 
    if (!tail) return *this; 

    for (int i = 1; i <= count - 1; i++) 
    { 
     tail = tail->next; 
    } 

    return *this; 
} 
CCircleList& CCircleList::setPosition(int index) // set current to specified index 
{ 
    if (index < 0) index = 0; 
    if (index >= count) index = count - 1; 

    current = tail->next; 

    for (int i = 0; i < index; ++i) 
    { 
     current = current->next; 
    } 

    return *this; 
} 
+0

如果粘貼所有的代碼,在promoteIndex的至少定義,這將是更好,demoteIndex和setPosition。 – GeneralFailure

+0

在調試器中運行,逐行執行代碼,逐步查看函數,查看*真正發生的事情。 –

+3

你真的打算在if(index =(count - 1))中賦值嗎? – molbdnilo

回答

1

而不是

else if (index = (count - 1)) 

嘗試

else if (index == (count - 1))