#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode {
int data;
struct Lnode* next;}Lnode,* linklist;voidinitlinklist(Lnode*&L,int n=10){//定义头结点L与链表的长度n
Lnode*L1;//L1指向当前所在节点L=(Lnode*)malloc(sizeof(Lnode));
Lnode*L2=(Lnode*)malloc(sizeof(Lnode));L2=L;//利用L2存储头结点位置if(L==NULL){printf("分配空间失败");}L->next =NULL;for(int i =1; i <= n; i++){L1=(Lnode*)malloc(sizeof(Lnode));L1->data = i;L->next =L1;L1->next =NULL;L=L1;}L=L2;}//在第i个位置插入元素e,带头结点//思路:找到第i-1个节点,分配空间,改指针
bool listinsert(linklist&L, int i, int e){if(i <1){returnfalse;}
Lnode* p;//建立一个指针用来指向当前扫描的结点
int j =0;//当前p指向的第几个节点
p =L;//L指向头结点,第“0”个节点while(p !=NULL&& j < i -1){//p指向不为空且j < i - 1时进行循环,找到第i-1个节点
p = p->next;
j++;}if(p ==NULL)//i值不合法,i-1的值已超过链表长度n{returnfalse;}
Lnode* s =(Lnode*)malloc(sizeof(Lnode));//s为要插入的节点
s->data = e;
s->next = p->next;
p->next = s;returntrue;}
int main(){
Lnode*L;
int i, e;initlinklist(L,100);if(listinsert(L,72,6666)){for(i =1; i <=100; i++){printf("%d\n",L->data);L=L->next;}printf("已于表中插入成功");}else{printf("插入失败!");}return1;}
//当链表不带头结点时,插入删除第1个元素则需要变化头指针,需要另外讨论
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode {
int data;
struct Lnode *next;}Lnode,*linklist;//思路:找到第i-1个节点,分配空间,改指针
bool listinsert(linklist&L, int i, int e){if(i <1){returnfalse;}if(i ==1){
Lnode* s =(Lnode*)malloc(sizeof(Lnode));
s->data = e;
s->next =L;L= s;returntrue;}
Lnode* p;//建立一个指针用来指向当前扫描的结点
int j=1;//当前p指向的第几个节点 此处不同!!!
p =L;//L指向头结点,第“0”个节点while(p !=NULL&& j < i -1){//p指向不为空且j < i - 1时进行循环,找到第i-1个节点
p = p->next;
j++;}if(p ==NULL)//i值不合法returnfalse;
Lnode* s =(Lnode*)malloc(sizeof(Lnode));
s->data = e;
s->next = p->next;
p->next = s;returntrue;}