当前位置:首页>维修大全>综合>

单链表的插入和删除结点的核心语句

单链表的插入和删除结点的核心语句

更新时间:2023-11-21 05:37:59

单链表的插入和删除结点的核心语句

  Status ListInsert(LinkList &L,int i,ElemType e) { // 在不设头结点的单链线性表L中第i个位置之前插入元素e int j=1; // 计数器初值为1 LinkList s,p=L; // p指向第1个结点 if(i<1) // i值不合法 return ERROR; s=(LinkList)malloc(sizeof(LNode)); // 生成新结点,以下将其插入L中 s->data=e; // 给s的data域赋值e if(i==1) // 插在表头 { s->next=L; // 新结点指向原第1个结点 L=s; // L指向新结点(改变L) } else { // 插在表的其余处 while(p&&j<i-1) // 寻找第i-1个结点 { j++; // 计数器+1 p=p->next; // p指向下一个结点 } if(!p) // i大于表长+1 return ERROR; // 插入失败 s->next=p->next; // 新结点指向原第i个结点 p->next=s; // 原第i-1个结点指向新结点 } return OK; // 插入成功 } Status ListDelete(LinkList &L,int i,ElemType &e) { // 在不设头结点的单链线性表L中,删除第i个元素,并由e返回其值 int j=1; // 计数器初值为1 LinkList q,p=L; // p指向第1个结点 if(!L) // 表L空 return ERROR; // 删除失败 else if(i==1) // 删除第1个结点 { L=p->next; // L由第2个结点开始(改变L) e=p->data; // 将待删结点的值赋给e free(p); // 删除并释放第1个结点 } else { while(p->next&&j<i-1) // 寻找第i个结点,并令p指向其前驱 { j++; // 计数器+1 p=p->next; // p指向下一个结点 } if(!p->next||j>i-1) // 删除位置不合理 return ERROR; // 删除失败 q=p->next; // q指向待删除结点 p->next=q->next; // 待删结点的前驱指向待删结点的后继 e=q->data; // 将待删结点的值赋给e free(q); // 释放待删结点 } return OK; // 删除成功 }

更多栏目