单链表插入结点

void insertList(LinkList &L,int i,int e)
{
	LinkList p=L;
	int j=0;
	while(p&&j<i-1){  //在i-1位置插入 
		p=p->next;
		j++;
	};
	s=new ListNode;
	s->data=e;
	s->next=p->next;
	p->next=s;
}

### 如何在单链表插入节点 #### 头插法实现 为了在单链表的头部插入一个新的节点,可以采用如下方式: ```c++ // 定义单链表节点结构体 typedef struct LNode { int val; // 数据域 LNode* next; // 指针域 } *List; void InsertAtHead(List &L, int value) { LNode* newNode = new LNode(); // 创建新节点 newNode->val = value; newNode->next = L; // 新节点指向原首节点 L = newNode; // 更新头指针至新节点位置 } ``` 此函数接收两个参数:一个是列表引用`&L`以允许修改原始指针;另一个是要插入的新值`value`。创建新的节点并将其设置为首节点[^1]。 #### 尾插法实现 如果希望向单链表末尾添加元素,则需遍历直到找到最后一个节点再执行插入动作: ```c++ void InsertAtTail(List &L, int value){ LNode* newNode = new LNode(); newNode->val = value; newNode->next = nullptr; if (L == nullptr){ // 如果链表为空则直接赋值给head L = newNode; }else{ LNode* temp = L; while(temp->next != nullptr){ temp = temp->next; } temp->next = newNode; // 追加到链表最后面 } } ``` 这段代码同样接受一个列表引用以及待加入数值作为输入参数。当遇到空链表情况时会特殊处理,否则就迭代访问直至发现当前节点无后续链接处停下,并在那里附加新成员[^4]。 #### 中间位置插入 对于指定位置pos前后的节点之间插入的情况,先定位目标位置之前的那个节点prev,之后调整前后关系完成插入过程: ```c++ bool InsertAfterPos(List &L, int pos, int value){ if(pos < 0 || (L==nullptr && pos>0)) return false; LNode* prev = L; for(int i=0; prev!=nullptr && i<pos-1; ++i){ prev = prev->next; } if(prev == nullptr) return false; LNode* newNode = new LNode(); newNode->val = value; newNode->next = prev->next; prev->next = newNode; return true; } ``` 这里实现了基于索引的位置插入逻辑,其中包含了边界条件判断来确保合法的操作范围。成功返回true表示已正确插入,失败则返回false提示错误发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值