单链表用结构体实现

typedef struct Node * LinkList;
typedef struct Node 
{
    int data;
    LinkList next;
} node;

node 代表 struct Node
LinkList 代表 sturct Node * 结构体指针
1 链表的建立
建立一个头指针里面没有数据 待会指向第一个节点
q 刚开始也指向第一个节点 第二个节点建立 q就指向第二个节点 然后q = p q移动到下一个节点 最后的要注意让q->next = NULL

LinkList creat()
{
    LinkList head, p, q;
    head = new node;
    head->next = NULL;
    int n, x;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
        cin>>x;
        p = new node;
        p->data = x;
        p->next = NULL;
        if(head->next == NULL)
            head->next = p;
        else 
            q->next = p;
        q = p;
    }
    q->next = NULL;
    return head;
}

2 插入算法 在第index-1位置插入element
创建一个指针指向第一个节点用一个循环找到index-1的位置 如果p == NULL 说明没找到 index的范围是 [1,节点总数]
创造一个s节点 让element存储在里面
要在p 节点 和 p->next 节点中插入 s
先让s->next 指向p->next 节点再让 p->next指向s
如果先让 p->next 指向s s->next 指向p->next
那么s->next的节点就指向s本身了
考虑特殊情况
index == 1
则头指针指向新的s节点
s节点指向原来的第一个头节点p
两者顺序可以调换

void insert(LinkList head, int index, int element)
{
    LinkList p = head->next, q;
    int j = 1;
    while( j < index -1 && p != NULL)
    {
        p = p->next;
        j++;
    }//p 是index-1的位置  j 是index - 1
    if(index == 1)
    {
    LinkList s;
    s = new node;
    s->data = element;
    head->next = s;
    s->next = p;
    return;
    }
    else if( j > index  || !p)
        return;
    LinkList s;
    s = new node;
    s->data = element;
    s->next = p->next;
    p->next = s; 
}

3 打印函数 就是普通的遍历

void show(LinkList head)
{
    LinkList p = head->next;
    while(p!=NULL)
    {
        cout<<p->data<<' ';
        p = p->next;
    }
}

接下来完整代码

#include<iostream>
using namespace std;
typedef struct Node * LinkList;
typedef struct Node 
{
    int data;
    LinkList next;
} node;
LinkList creat()
{
    LinkList head, p, q;
    head = new node;
    head->next = NULL;
    int n, x;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
        cin>>x;
        p = new node;
        p->data = x;
        p->next = NULL;
        if(head->next == NULL)
            head->next = p;
        else 
            q->next = p;
        q = p;
    }
    q->next = NULL;
    return head;
}
void insert(LinkList head, int index, int element)
{
    LinkList p = head->next, q;
    int j = 1;
    while( j < index -1 && p != NULL)
    {
        p = p->next;
        j++;
    }//p 是index-1的位置 j 是index - 1
    if(index == 1)
    {
    LinkList s;
    s = new node;
    s->data = element;
    s->next = p;
    head->next = s;
    return;
    }
    else if( j > index  || !p)
        return;
    LinkList s;
    s = new node;
    s->data = element;
    s->next = p->next;
    p->next = s; 

}
void show(LinkList head)
{
    LinkList p = head->next;
    while(p!=NULL)
    {
        cout<<p->data<<' ';
        p = p->next;
    }
}
int main()
{
    LinkList head;
    head = creat();
    int index, element;
    cin>>index;
    cin>>element;
    insert(head, index, element);
    show(head);
    return 0;
}