标签:删除结点 单链表删除结点 删除某个结点 单链表删除 结点
题目:删除带头结点的单链表L中的结点p,p不是最后一个结点,要求时间复杂度为O(1)。}LNode,*LinkList;
算法实现:
void deleteNode(LNode* &p) { if(p==NULL||p->next==NULL) return;//如果p为空或为单链表中最后一个结点不符合题意,直接返回 LNode* q=p->next;//q为p的后继结点 p->data=q->data; p->next=q->next;//从单链表中删除结点q free(q);//释放结点q q=NULL;//将结点q置为空,防止它成为野指针 }
void deleteNode(LinkList &L,LNode* &p) { if(p==NULL||L==NULL) return;//如果p为空或单链表L为空不符合题意,直接返回 if(p->next) //如果p不是最后一个结点 { LNode* q=p->next;//q为p的后继结点 p->data=q->data; p->next=q->next;//从单链表中删除结点q free(q);//释放结点q q=NULL;//将结点q置为空,防止它成为野指针 } else //如果p是最后一个结点 { LNode* pre=L;//用pre表示p的前驱结点 while(pre->next) //保持pre有后继结点 { if(pre->next==p)//如果pre是p的前驱结点 { pre->next=p->next;//将结点p从单链表中删除 free(p);//释放结点p p=NULL;//将结点p置为空,防止它成为野指针 } } if(!p) //p不为空,说明p不在单链表L中 { return; } } }
标签:删除结点 单链表删除结点 删除某个结点 单链表删除 结点
原文地址:http://blog.csdn.net/lavor_zl/article/details/42678371