好家伙自问自答
clearlist是清空里面的内容,但是内存还保留,这就是和析构函数的区别。
释放内存就是表示这个地址是可以使用的了,跟这个地址的内容没有关系
除头结点以外的结点已经被删除了,此时剩下的头结点的指针域没有一个确定的指向,如果设成NULL的话,就像相当于回到单链表的最初始状态。
不是头节点额,是头节点指向的节点(如果不存在,则mylist->next = NULL)
不是,他先判断链表中有没有这个序号的元素,有就这个元素的值就把他取出来,没有就return -1;目的是找到你要的这个序号元素的值。
bool List::GetElem(int i,Node *pNode)
{
if(i<0||i>=m_iLength)
{
return false;
}
Node*currentNode=m_pList;
Node*currentNodebefore=NULL;
for(int k =0;k<=i;k++)
{
currentNodebefore=currentNode;
currentNode= currentNod->next;
}
pNode->date=currentNode->date;
return true
}
清空一个链表应该是把它的每个结点所占的内存全部进行清空,所以要从前往后遍历,每遍历一个结点,就把遍历过的结点进行删除,但是呢,在删除当前结点之前,要将当前结点的下一个结点保存起来,不然删除之后就找不到下一个结点来进行清空了,所以要使用temp来保存当前结点的下一个结点Node *temp=currentNode->next(currentNode结点的指针域指向的就是下一个结点,就是currentNode->next就是下一个结点),保存之后呢,再把当前结点删除掉也就是delete currentNode,最后再把当前结点的下一个节点赋值给当前结点,从而保证能够继续往后进行遍历。
我注释掉了,循环之后已经为NULL
否aa
currentNode一开始就指向的是头结点的下一个结点(m_pList->next),所以第一次删除就是头结点的下一个结点,指向头结点的m_pList内存并没有被删除。
指针代表着指向一块内存,del current_node,代表释放current__node指向的那块内存。但current_node还是可以通过赋值,去指向其他内存的
http://blog.csdn.net/johnny710vip/article/details/7281131
应该是里面第一个顺序定义struct一个意思吧,i用来实例化data,nullptr用来实例化指针
没有内存,何来指针一说
因为temp只是定义的一个node类型的临时变量用来存储某个node的值,和链表内的元素没有任何关系。所以在函数执行结束后,会自动被系统回收内存
其实已经删除了尾节点,currentNode->next != NULL 是没有删除尾节点的,而currentNode != NULL表示这个节点为空,即已经删除了
m_pList是一个Node*对象,这是对的。next只是一个数据成员,next只是一个指向Node类型的指针,指向下一个结点
“在构造函数里面已经m_pList->next = NULL”这是初始化的时候,并没有插入任何元素,当然应该置为空。插入元素之后,就不会再为空了。
delete m_pList; 这个操作只是将指针m_pList所指向的内存空间释放掉,使内存重归操作系统。但m_pList的指向位置并没有改变,此位置的内存已经被释放掉了,若再用m_pList访问这块内存,系统就会崩溃出错!为了防止这种误操作所引起的崩溃出错。所以将m_pList置为NULL的安全状态,就避免这种野指针事件的发生。希望对你有所帮助~
(1)currentnode是这个指针类型的变量,它也是需要占据一定的内存来存储数据的,存放的就是它指向内存的地址,释放掉的currentnode指向的内存,即解除currentnode和它指向的内存的关系,currentnote占据的内存还是存在的。下面是我画的图希望对你有帮助。
(2)一般可以认为new和delete是互为对应的