课程链接

    1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/379856/1599808121310-3e6f520e-5b2a-4995-9943-e70144e67c86.png#align=left&display=inline&height=113&margin=%5Bobject%20Object%5D&name=image.png&originHeight=225&originWidth=767&size=63862&status=done&style=none&width=383.5)

    循环找到第i-1个节点操作

    1. bool ListInsert(LinkList &L, int i,ElemTypee) //在第i个结点插入元素
    2. {
    3. if (i<1)
    4. return flase;
    5. LNode *p; //指针P指向当前扫描到的结点
    6. int j=0; //当前P指向的是第几个结点
    7. P=L; //L指向头节点,头结点是第0个结点(不存数据)
    8. while (p!=NULL && j<i-1) //循环找到第i-1个结点
    9. {
    10. p=p->next;
    11. j++;
    12. }
    13. if (p==NULL)
    14. return false; // 输入的i值不合法,就是输入的i值比链表长度要大挺多
    15. }


    插入操作**

    1. LNode *S=(LNode*)malloc(sizeof(LNode));
    2. S->data = e; //数据
    3. S->next = p->next; //S->next指向后一节点的首地址
    4. p->next = S; //p->next指向S的首地址

    指定结点的前插操作(在P结点之前插入e元素)

    1. bool InsertPriorNode(LNode *p,ElemType e){
    2. if (p==NULL)
    3. return false;
    4. LNode *s = (LNode *)malloc(sizeof(LNode));
    5. if (s=NULL)
    6. return false;
    7. s->next = p-next;
    8. p-next = s; //将新节点s连接到p
    9. s->data = p->data //把p的数据传给s
    10. p->data = e; //把e传给p
    11. return true;
    12. }
    13. //这个时间复杂度是O(1)

    按位序删除(带头结点)

    1. bool ListDelete(LinkList &L,int i,ElemType &e)
    2. {
    3. if (i<1)
    4. return false;
    5. LNode *p; //指针p指向当前扫描到的结点
    6. int j = 0; //当前指针p指向的结点
    7. P=L; //L指向头结点
    8. while(p!=NULL && j<i-1) //循环找到第i-1个结点
    9. {
    10. p=p->next;
    11. j++;
    12. }
    13. if (p==NULL) //i值不合法
    14. return false;
    15. if (p->next ==NULL)
    16. return false;
    17. LNode*q = p->next; //令q指向被删除的结点
    18. e= q->data; //把被删除结点的数据赋给e
    19. p->next=q->next; //把q结点指向的地址赋给上一个结点的指针位
    20. free(q); //释放q结点的存储空间
    21. return true;
    22. }

    指定结点的删除

    1. //删除p结点
    2. LNode*q=p->next; //令q指向p的下一个结点
    3. p->data=p->next->data; //把p下一个结点的数据存到p结点
    4. p->next=q->next; //把q指向的地址链接给p
    5. free(q); //释放q的空间
    6. return true;

    上面代码有一个bug,就是当p结点是链表最后一个结点时,第四行代码就会出现空指针的错误。