删除链表节点

来源:互联网 发布:奢侈品品牌 知乎 编辑:程序博客网 时间:2024/06/10 21:25
假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点

方法一:
算法是:把后面的结点都往前移,然后删除最后一个结点
比如链表是:1 2 3 4 5
要删除2,那么就把3 4 5往前面移,得到这样1 3 4 5 5
然后删除最后一个结点

void deleteItem(Node *p)
{
while (NULL != p->next)
{
p->item=p->next->item;
p=p->next;
}
delete p;
p=NULL;
}


方法2,效率会更高点:
把3(值域)复制到2,变成1 3 3 4 5 然后修改原来2 结点的尾指针指向4 然后删除第二个3
1 3 [3] 4 5

void deleteItem (Node *p)
{
Node *tmp=NULL;
if (p->next!=NULL)
{
p->item=p->next->item;
}
tmp=p->next;
p->next=p->next->next;
delete tmp;
tmp=NULL;
}
原创粉丝点击