数据结构论坛

首页 » 分类 » 定义 » 数据结构图解链表,链表的插入和删除c语
TUhjnbcbe - 2023/6/22 20:40:00

我们上节讲解了链表的建立,本节讲解的是在链表中指定位置中插入一个结点,以及在指定位置中删除一个结点

指定位置插入一个结点

这里我们在第3个结点后插入一个结点,可以将新结点赋值给第三个结点的next,将原来的第4个结点赋值给新界点的next,这里新结点就成立第4个结点了,上代码

voidList_IndexInsert(LNode**root,ElemTypedata,intindex){  LNode*node=*root;  if(node==NULL)  {    return;  }  if(index==1)  {    LNode*item=calloc(1,sizeof(LNode));    assert(item);    item-data=data;    item-next=node;    (*root)=item;    return;  }  intcount=1;  while(true)  {    if(count+1==index

node-next==NULL)    {      LNode*item=calloc(1,sizeof(LNode));      assert(item);      item-data=data;      if(node-next==NULL)      {        item-next=NULL;      }      else{        item-next=node-next;      }      node-next=item;      break;    }    else{      node=node-next;      count++;    }  }}

删除一个结点

链表的删除可以将删除位置的后一个结点赋值给前一个结点的next,然后将删除位置的结点释放即可,上代码

voidList_Delete(LNode**root,intindex){  LNode*node=*root;  if(node==NULL)  {    return;  }  if(index==1)  {    (*root)=(*root)-next;    free(node);    return;  }  intcount=1;  while(true)  {    if(count+1==index

node==NULL)    {      if(node==NULL)      {        break;      }      structLNode*next=node-next;      if(next!=NULL)      {        node-next=next-next;      }      break;    }    else{      node=node-next;      count++;    }  }}

这里代码就编写完成了,来测试一下代码

voidmain(){  LNode*node=NULL;  LNode*node1=NULL;  List_TailInsert(node,1);  List_TailInsert(node,2);  List_TailInsert(node,4);  List_IndexInsert(node,3,3);  List_Delete(node,3);  while(true)  {    printf("%d\n",node-data);    if(node-next==NULL)    {      break;    }    node=node-next;  }}

1
查看完整版本: 数据结构图解链表,链表的插入和删除c语