
循环找到第i-1个节点操作
bool ListInsert(LinkList &L, int i,ElemTypee) //在第i个结点插入元素{if (i<1)return flase;LNode *p; //指针P指向当前扫描到的结点int j=0; //当前P指向的是第几个结点P=L; //L指向头节点,头结点是第0个结点(不存数据)while (p!=NULL && j<i-1) //循环找到第i-1个结点{p=p->next;j++;}if (p==NULL)return false; // 输入的i值不合法,就是输入的i值比链表长度要大挺多}
插入操作**
LNode *S=(LNode*)malloc(sizeof(LNode));S->data = e; //数据S->next = p->next; //S->next指向后一节点的首地址p->next = S; //p->next指向S的首地址
指定结点的前插操作(在P结点之前插入e元素)
bool InsertPriorNode(LNode *p,ElemType e){if (p==NULL)return false;LNode *s = (LNode *)malloc(sizeof(LNode));if (s=NULL)return false;s->next = p-next;p-next = s; //将新节点s连接到ps->data = p->data //把p的数据传给sp->data = e; //把e传给preturn true;}//这个时间复杂度是O(1)
按位序删除(带头结点)
bool ListDelete(LinkList &L,int i,ElemType &e){if (i<1)return false;LNode *p; //指针p指向当前扫描到的结点int j = 0; //当前指针p指向的结点P=L; //L指向头结点while(p!=NULL && j<i-1) //循环找到第i-1个结点{p=p->next;j++;}if (p==NULL) //i值不合法return false;if (p->next ==NULL)return false;LNode*q = p->next; //令q指向被删除的结点e= q->data; //把被删除结点的数据赋给ep->next=q->next; //把q结点指向的地址赋给上一个结点的指针位free(q); //释放q结点的存储空间return true;}
指定结点的删除
//删除p结点LNode*q=p->next; //令q指向p的下一个结点p->data=p->next->data; //把p下一个结点的数据存到p结点p->next=q->next; //把q指向的地址链接给pfree(q); //释放q的空间return true;
上面代码有一个bug,就是当p结点是链表最后一个结点时,第四行代码就会出现空指针的错误。
