如何查找和删除具有节点的学生

时间:2015-03-08 15:05:52

标签: c struct nodes doubly-linked-list

我无法弄清楚该怎么做,因为由于某些原因我无法从列表中间删除节点,因此放弃我的学生使用他们绑定的节点。我还没搞清楚。任何想法都会很高兴。这是我的想法会起作用,但它没有

   Void drop_student ( double_linkedlist_t* listPtr)
   {
    Node_t* CurPtr;
    Node_t* nodePtr;
    CurPtr = listPtr->headPtr;
     While ( nodePtr != CurPtr )
     {
        If ( nodePtr == CurPtr ) 
         {
            //found it at beginning
            CurPtr = listPtr->headPtr->nextPtr
          }
      }
   }

或者那种性质的东西。我只需要输入一个学生ID,然后它应该找到它绑定的节点并从我的列表中删除它。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

尝试理解它。如果您遇到任何问题,请回复。

我假设节点存在于链表中。

void drop_student ( double_linkedlist_t* listPtr){
    Node_t* CurPtr;
    Node_t* nodePtr;
    CurPtr = listPtr->headPtr;

    if ( nodePtr == CurPtr ) {
        //found it at beginning
        listPtr->headPtr = listPtr->headPtr->nextPtr;
        return;
    }

    //if not at begining search for the node through iteration
    While ( nodePtr != CurPtr->nextPtr ){
        CurPtr = CurPtr->nextPtr;
    }

    //if it is end node
    if(nodePtr -> next = NULL){
        CurPtr->nextPtr=NULL;
        return;
    }

    //if in middle
    nodePtr -> nextPtr -> previousPtr = curPtr;
    curPtr -> nextPtr = nodePtr -> nextPtr;

}

按照this link中的数字进行操作,以便更好地理解。