线性表-插入第i个元素(链式存储)

输入
第1行输入一个整数n,表示单链表中数据元素的个数
第2行输入n个整数,表示单链表中存储的具体数据(要求用头插法建立单链表)
第3行输入两个整数i和e,分别表示插入的位置以及被插入的值
输出
第4行输出插入之后的单链表
样例输入 Copy
4
1 2 3 4
3 100
样例输出 Copy
4 3 100 2 1

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */

typedef struct Node {
    ElemType data;
    struct Node *next;
} LNode,*linkList;

void initList(linkList &L);
void inputList(linkList L);
void insertList(linkList L,int i,ElemType e);
void printList(linkList L);

int main(void) {
    int i;
    ElemType e;
    linkList head;
    initList(head);
    inputList(head);
    scanf("%d %d",&i,&e);
    insertList(head,i,e);
    printList(head);

    return 0;
}

void initList(linkList &L) {
    L=new LNode;
    L->next=NULL;
}

void inputList(linkList L) {
    int n;
    linkList p;
    scanf("%d",&n);
    for(int i=0; i<n; i++) {
        p = new LNode;
        scanf("%d",&p->data);
        p->next=L->next;
        L->next=p;
    }
}

void printList(linkList L) {
    linkList p=L->next;
    while(p!=NULL) {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

/*仅提交以下代码*/
void insertList(linkList L,int i,ElemType e) {


}


提供参考,这里考虑插入位置为头插法链表后的位置,而且不考虑插入位置超过链表大小。

void insertList(linkList L, int i, ElemType e) {
    linkList p = L->next,pre=L,q;
    //顺序查找到第i个数记录在p,pre为p的前一个
    while (--i) {
        p = p->next;
        pre = pre->next;
    }
    //q结点作为插入结点
    q = new LNode;
    q->data = e;
    q->next = p;
    pre->next = q;
}

供参考:

#include <stdio.h>
#include <stdlib.h>
 
typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
 
typedef struct Node {
    ElemType data;
    struct Node *next;
} LNode,*linkList;
 
void initList(linkList &L);
void inputList(linkList L);
void insertList(linkList L,int i,ElemType e);
void printList(linkList L);
 
int main(void) {
    int i;
    ElemType e;
    linkList head;
    initList(head);
    inputList(head);
    scanf("%d %d",&i,&e);
    insertList(head,i,e);
    printList(head);
 
    return 0;
}
 
void initList(linkList &L) {
    L=new LNode;
    L->next=NULL;
}
 
void inputList(linkList L) {
    int n;
    linkList p;
    scanf("%d",&n);
    for(int i=0; i<n; i++) {
        p = new LNode;
        scanf("%d",&p->data);
        p->next=L->next;
        L->next=p;
    }
}
 
void printList(linkList L) {
    linkList p=L->next;
    while(p!=NULL) {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
 
/*仅提交以下代码*/
void insertList(linkList L,int i,ElemType e) {
 
    int j = 1;
    if (L == NULL || i < 1) return;
    linkList p = L;
    while(p->next && j < i){j++; p = p->next;}
    if (p->next == NULL) return;
    else{
        linkList q = new LNode;
        q->next = NULL;
        q->data = e;
        q->next = p->next;
        p->next = q;
    }
}