【数据结构】EOJ 1006. 线性链表的插入与删除

题目:实现线性链表的插入与删除操作

head指向链表的首元结点,如果链表为空,headNULL

NODE* insertLinklist(NODE* head,int tar,int val)

NODE* deleteLinklist(NODE* head,int tar)

显然,为了完成该链表维护工作,你需要实现上述两个辅助函数

插入操作中:

tarval表示将存放新值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.注意通过写注释来有逻辑地分析问题。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值