建立链表的时候,头结点我们把数据域设置为固定的0,并且这个数据域没有任何意义,这个头结点存在的意义只是为了指向这一条链表。 头结点之后的第一个节点, 我们认为他是第0个节点。
建立一个毫无意义的头结点的好处在于:
1、可以很好的固定住链表的入口
2、再清空整个链表的时候(清空不是释放),可以留有一个入口记录下链表的内存位置。 如果没有这个节点,把链表清空了 就相当于释放了
头结点没有数据域?
取出第N个节点的数据,只需要找到该节点,将data部分赋值出去则可
List::LocateElem
List::GetElem
bool List::GetElem(int i, Node *pNode){
if(i<0||i>=m_iength){
return false;
}
Node *currentNode=m_pList;
for(int k=0;k<i;k++){
currentNode=currentNode->next;
}
while(k<i){
currentNode=currentNode->next;
k++;}
pNode->data=currentNode->data;
retrun true;
}
int List::LocateElem(Node *pNode){
int k=0;
Node *currentNode=m_pList;
while(currentNode->next!=null){
currentNode=currentNode->next;
if(currenetNode->data==pNode->data){
return k;
}
k++;
}
return -1;
}
}
在LocateElem成员函数中,因为首结点的数据域无意义,所以从第二个结点开始对比。所以先指到下一个指针域,再比较。