请教一个关于结点的问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:20:55
例如说我们创建了一条链,对其中的结点temp进行了操作,操作后这个结点就作废了,我们要对下一个结点进行操作,于是,我们新建了一个结点del,再者将temp送给结点del,再将temp的下一个结点送给temp,然后删掉del即:node*del=new node;del=temp;temp=temp->next;delete del;

请问:这样子能否将temp真正删除?(也就是,原先已经操作过的结点temp是否有真正被删除掉?还是说只是删除了新申请的结点del,而原先已操作过的结点还存在?)如果没有的话,要怎样才能真正的将已经操作过的那个结点(即原先的temp)删除呢?请不吝赐教!谢谢!

注:temp之前的结点无标记!该链为单向链!
谢谢你的讲解,你所说的情况我都了解,但如果像你所说的那样子的话,我想再向你请教一个问题:Node *del=temp;和Node *del=new Node;del=temp;这两个不同表达的区别,如果我再在这两者后面都加上delete del的话,你认为有区别吗?

以前操作的temp节点被删了!因为delete del这个语句中del保存的地址是以前操作的temp的地址,因为地址在内存中是唯一的,所以temp=temp->next这个语句之前的temp节点(即操作前的temp节点)被删了。
但这是一个极不好的链表操作习惯!因为一旦del节点被删除del之前的和之后的节点就断了!1->2->3->4->5->6,就像你删了3,2和4就断了。所以最好定义一个指针指向del的前一个节点pre!然后删了del后将pre和temp连起来!pre->next=temp。

Node *del=temp 这个语句只是定义了一个Node指针del,并给它赋予temp这个地址的初值;

而Node *del=new Node;del=temp;中,前一个语句不但定义了一个Node指针del,而且还在内存中开辟一个新的空间,空间大小为Node数据类型的大小,并将这个空间的地址赋予了del;后一个语句又将temp的值赋予了del。(这个语句又将新开辟的空间地址给丢失了)