数据结构单链表插入一个元素

Status ListInsert L(LinkList &L,int i,ElemType e)
{
//在带头结点的单练线性表L中第i个位置之前插入元素e
p=L; j=0;
while(p&&j<i-1)//寻找第I-1个节点
{
  p=p->next;
  ++j;
}
if(!p||j>i-1)//i小于1或大于表长
return ERROR; 
s=(LinkList)malloc(sixeof(LNode));//生成新节点
s->data=e;    //插入L中
s->next=p->next;
p->next=s;
return OK;
}

s->data=e;        //先把s结点赋值; 
s->next=p->next;  //s结点的下一个结点是链表中p结点的下一个结点
p->next=s;   //p结点的下一个结点是s

在纸上画一下最好理解

如图 -> 表示 指针的指向对象

... -> p -> q -> ...

       s
=> 
... -> p -> q -> ...      //s->next=p->next;
            ^
            |
            s
=>
... -> p    q -> ...      //p->next=s; 
       |    ^
       |    |
       ---->s
即:
... -> p -> s-> q -> ...  //p->next=s; 

注:

s->data=e;    // 这里的s是新生成的一个节点,e是这个节点存储的元素
s->next=p->next; // 把s的next指针指向要插入点的后一个节点
p->next=s;       用要插入位置前一个节点的next指针指向s

 

转载于:https://www.cnblogs.com/xyh592/articles/3656420.html

在C语言中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素一个指向下一个节点的指针。插入操作是向链表中添加新节点的过程。 要在单链表插入一个新节点,需要进行以下步骤: 1. 创建一个新节点,并为其分配内存空间。 2. 将要插入的数据赋值给新节点的数据域。 3. 将新节点的指针域指向原链表中插入位置的下一个节点。 4. 将原链表中插入位置的前一个节点的指针域指向新节点。 下面是一个示例代码,演示了如何在单链表插入一个新节点: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构 struct Node { int data; struct Node* next; }; // 在链表中插入新节点 void insertNode(struct Node** head, int newData) { // 创建新节点 struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = newData; newNode->next = NULL; // 如果链表为空,则将新节点作为头节点 if (*head == NULL) { *head = newNode; return; } // 找到插入位置的前一个节点 struct Node* prevNode = *head; while (prevNode->next != NULL) { prevNode = prevNode->next; } // 将新节点插入链表 prevNode->next = newNode; } // 打印链表 void printList(struct Node* node) { while (node != NULL) { printf("%d ", node->data); node = node->next; } printf("\n"); } int main() { struct Node* head = NULL; // 插入节点 insertNode(&head, 1); insertNode(&head, 2); insertNode(&head, 3); // 打印链表 printf("链表内容:"); printList(head); return 0; } ``` 这段代码创建了一个单链表,并在其中插入了三个节点。最后,通过调用`printList`函数,打印出链表的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值