单链表—带头指针插入操作

在单链表中的第i个位置上插入制定元素e

#include <iostream>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
using namespace std;
typedef struct lnode{
    int data;
    struct lnode *next;
}lnode,*linklist;
bool initlist(linklist &l)					//初始化单链表(带头指针)
{
    l=(lnode *)malloc(sizeof(lnode));	//分配一个头节点
    if(l==NULL)
        return FALSE;
    l->next=NULL;						//头节点之后为null
    return TRUE;
}
bool listinsert(linklist &l,int i,int e)	//插入操作
{
    if(i<1)								//i不能小于1,因为0是头指针
        return FALSE;
    lnode *p;							//指针p指向当前扫描到的点
    int j=0;								//当前p指向的是第几个节点,初始值0
    p=l;									//p指向头节点l
    while(p!=NULL&&j<i-1)				//循环,找到第(i-1)个节点
    {
        p=p->next;
        j++;
    }
    if(p==NULL)						//i值不合法,因为i已经超过当前长度
        return FALSE;
    lnode *s=(lnode *)malloc(sizeof(lnode));		//为要插入的元素开辟空间s
    s->data=e;							//把e存入新开辟的空间
    s->next=p->next;					//把s的下一节点指向原本p的下一节点
    p->next=s;							//再把p指向新开辟节点s
    return TRUE;
}
int getlist(linklist l,int i)				//按位查找
{
    lnode *p;
    p=l;
    int j=0;
    while(p->next!=NULL&&j<i)
    {
        p=p->next;
        j++;
    }
    if(j==i)
    {
        return p->data;
    }
    else return 0;
}
int main() {
    linklist l;
    initlist(l);
    listinsert(l,1,3);					//向单链表l中第一个位置插入元素1
    listinsert(l,2,4);					//………………………………
    listinsert(l,3,5);					//………………………………
    cout<<getlist(l,3)<<endl;		//打印位置为3的元素
	cout  << "over\n";
	return 0;
}
posted @ 2020-08-16 12:29  Cool-baby  阅读(120)  评论(0)    收藏  举报