题目:实现线性链表的插入与删除操作
head
指向链表的首元结点,如果链表为空,head
为NULL
NODE* insertLinklist(NODE* head,int tar,int val)
NODE* deleteLinklist(NODE* head,int tar)
显然,为了完成该链表维护工作,你需要实现上述两个辅助函数
插入操作中:
tar
,val
表示将存放新值val的节点插入到值为tar的节点之后
删除操作中:
tar
表示删除存放值为tar的节点(若有多个节点存放的值是tar,则删除第一个)
如果链表为空则忽略当前操作
两个简单的函数
NODE* insertLinklist(NODE* head, int tar,int val)
{
if(head==NULL)
{
NODE* p=new NODE;
p->data=val;
p->next=NULL;
return p;
}
if(head!=NULL)
{
NODE* p=new NODE;
NODE* p1=head;
while(p1!=NULL)
{
if(p1->data==tar)
{
p->next=p1->next;
p->data=val;
p1->next=p;
break;
}
else p1=p1->next;
}
return head;
}
}
NODE* deleteLinklist(NODE* head,int tar)
{
if(head==NULL)
{
return head;
}
if(head!=NULL)
{
//如果要删除的是头节点
if(head->data==tar)
{
if(head->next==NULL)
return NULL;
else
{
head=head->next;
return head;
}
}
//删除的不是头节点
NODE* p=head;
NODE* p1=head->next;
while(p1!=NULL)
{
if(p1->data==tar)
{
p->next=p1->next;
delete p1;
return head;
}
else
{
p1=p1->next ;
p=p->next;
}
}
}
else return head;
}
反思:1.对于链表的操作,要注意分析不同的情况:是否操作头节点? 是否操作尾节点 ?是否为空表?头节点删除后是否为空表?
2.注意通过写注释来有逻辑地分析问题。