单链表按位序插入

按位序插入(带头结点)

#define NULL 0

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

//在第i个位置插入数据e(带头结点)
bool ListInsert(LinkList &L, int i, int e){
    if (i<1)
        return false;
    LNode *p = L;           //指针p指向当前扫描结点,目前指向头结点,是第0个
    int j = 0;              //当前p指向第几个结点
    while (p!=NULL && j<i-1)          //循环指到第i-1个结点
    {
        p = p->next;
        j++;
    }
    if(p == NULL)           //i值不合法
        return false;
    LNode *s = (LNode*)malloc(sizeof(LNode));       //插入的新结点
    s->data = e;
    s->next = p->next;
    p->next = s;        //将结点s连到p后
    return true;
    
}

单链表按位序插入_第1张图片

按位序插入(无头结点)

#define NULL 0

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

//在第i个位置插入数据e(带头结点)
bool ListInsert(LinkList &L, int i, int e)if (i<1)
        return false;
	if (i == 1) {                //插入第1个结点操作不同
           LNode* s = (LNode*)malloc(sizeof(LNode));
           s->data = e;
           s->next = L;
           L = s;
           return true;
       }
	
	//下面和带头结点一样操作
	LNode *p = L;           //指针p指向当前扫描结点,目前指向头结点,是第0个
    int j = 0;              //当前p指向第几个结点
    while (p!=NULL && j<i-1)          //循环指到第i-1个结点
    {
        p = p->next;
        j++;
    }
    if(p == NULL)           //i值不合法
        return false;
    LNode *s = (LNode*)malloc(sizeof(LNode));       //插入的新结点
    s->data = e;
    s->next = p->next;
    p->next = s;        //将结点s连到p后
    return true;

单链表按位序插入_第2张图片
不带头结点写代码不方便,推荐带头结点

你可能感兴趣的:(数据结构,算法,c语言)