插入:在第i个结点钱插入一个新结点

算法步骤:

  1. 说先找到a(i-1)的存储位置p
  2. 生成一个数据为e的新节点s
  3. 插入新结点:①新节点指针域指向结点ai ②结点a(i-1)的指针域指向新结点

s->next = p->next;
p->next = s;

如果要把结点s插入到第i-1个位置,需要找到第ai个位置,

p->next表示的是p结点的指针域,也是ai的地址,

①首先把第i个结点的指针域放到s里面,

s->next = p->next;

②然后再把s的地址放到p结点的指针域中。

p->next = s;

思考:步骤①和步骤②不能调换位置,否则s结点就会指向自己。


2.课本上插入操作解读

代码

/* 在单链表指定位置插入一个新元素 */
/* 参数:LinkedList *L 单链表L    */
/* ElemType item 需要添加的新元素*/
/* int pos  新元素的插入位置    */
/* 返回值:int 是否插入成功    */
int ListInsert(LinkedList *L, Elemtype item, int pos)
{
  Node *q = (Node *)malloc(sizeof(Node));
  Node *p;
  int i = 0;
  q->data = item;
  q->next = NULL;
  
  /* 插入位置不正确
  pos小于1表示在第一个位置之前插入
  pos大于lastIndex+1表示在最后一个结点后面的第二个结点前面插入  如图所示
  */
  if((pos<1)|| (pos>L->count+1)
  {
    printf("Position is error!");
    return FAILURE;
  }
  if(L->head == NULL)  /*单链表为空*/
  {
    L->head = q;
    L->count+i+;
    return SUCCESS;
  }
  
}

最后修改:2022 年 03 月 17 日
如果觉得我的文章对你有用,请随意赞赏