单链表—带头指针插入操作
在单链表中的第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;
}
作者:Cool baby
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

浙公网安备 33010602011771号