【数据结构】单链表的插入和删除

我不是女神ヾ 2023-02-20 13:32 140阅读 0赞

单链表、循环链表的插入和删除

  • 单链表的插入
    • 在不带头结点的单链表中插入
      • 在表首插入无前驱结点
      • 其他位置插入有前驱结点
    • 在带头结点的单链表中插入
    • 插入部分代码实现
  • 单链表的删除
    • 在不带头结点的单链表中删除
      • 删除首元结点
      • 删除其他位置元素
    • 在带头结点的单链表中删除
    • 删除部分代码实现

单链表的插入

在不带头结点的单链表中插入

在表首插入无前驱结点

在这里插入图片描述

其他位置插入有前驱结点

在这里插入图片描述

在带头结点的单链表中插入

在这里插入图片描述

插入部分代码实现

  1. status ListInsert( LinkList &L, int i, ElemType e){
  2. //在带头结点的单链表L中第i个位置之前插入元素e,1≤ i≤表长+1
  3. p=L; j=0;
  4. while( p&&j<i-1 ) {
  5. p=p->next; j++; } //顺指针找第i-1个结点
  6. if( !p || j>i-1 ) return ERROR; //i大于表长加1或i小于1
  7. s=new LNode; //生成新结点
  8. s->data=e;
  9. s->next=p->next; //插入L中
  10. p->next=s;
  11. return OK;
  12. } //ListInsert

单链表的删除

在不带头结点的单链表中删除

删除首元结点

在这里插入图片描述

删除其他位置元素

在这里插入图片描述

在带头结点的单链表中删除

在这里插入图片描述

删除部分代码实现

  1. status ListDelete(LinkList &L, int i, ElemType &e) {
  2. //在带头结点的单链表L中,删除第i个元素,并用e返回其值
  3. p=L; j=0;
  4. while( p->next && j<i-1 ) {
  5. p=p->next; j++;} //顺指针找第i-1个结点
  6. if( !(p->next) || j>i-1 ) return ERROR; //i小于1或i大于表长
  7. q=p->next; //q指向第i个结点
  8. p->next=q->next;
  9. e=q->data;
  10. free(q); //释放所删结点的空间
  11. return OK;
  12. } //ListDelete

发表评论

表情:
评论列表 (有 0 条评论,140人围观)

还没有评论,来说两句吧...

相关阅读