weixin_45646010
橙子味的萌新
2019-09-15 18:32
采纳率: 0%
浏览 454

写了链表插入函数 主函数却没实现插入功能

#include
#include
#include

#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;

typedef int ElemType;
typedef int Status;

typedef struct LNode
{
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
}LNode,*Linklist; //Linklist为指向结构体LNode的指针类型

void CreateList_R(Linklist &L,int n) //正位序输入n个元素的值,建立带表头结点的单链表L
{
int i;
LNode *p,*r;
L=new LNode; //生成新结点作为头结点,用头指针L指向头结点
L->next=NULL; //先建立一个带头结点的空链表
r=L; //尾指针r指向头节点
for(i=0;i {
p=new LNode; //生成新结点
cin>>p->data; //输入元素值赋给新结点*p的数据域
p->next=NULL;
r->next=p; //将新结点*p插入尾结点*r之后
r=p; //r指向新的尾结点*p
}
}

void ListOutput(Linklist L) //输出链表
{
LNode *p;
p=L->next;
while (p != NULL)
{ cout<data<<" ";
p=p->next;
}
cout<<endl;
}

Status ListInsert(Linklist &L,int i,ElemType e) //在带头结点的单链表L中第i个位置插入值为e的新结点
{
LNode *p,*r;
int j;
p=L;
j=0;
while(p && (j {
p=p->next;
++j; //查找第i-1个结点,p指向该节点
}
if(!p||j>i-1)
return ERROR; //i>n+1或i r=new LNode; //生成新结点*m
r->data=e; //将结点*m的数据域置为e
r->next=p->next; //将结点*m的指针域指向结点ai
p->next=r; //将结点*p的指针域指向结点m
return OK;
}

void nizhi(Linklist &L)
{
LNode *s,*q;
q=L->next;
L->next=NULL; ////将链表断开分成两个链表,第二个链表不带头结点,q是头指针
while(q!=NULL)
{
s=q; //摘下第二个链表的首结点,使s指向它
q=q->next;
s->next=L->next; //将结点*s头插到链表L中
L->next=s;
}
}
int main()
{
Linklist L;
ElemType e;
int n;
int i;
cout<<"输入数据个数:"< cin>>n;
cout< cout CreateList_R(L,n);
cout ListOutput(L);
cout cin>>e;
ListInsert(L,i,e);
cout<<"插入后的线性表:"<<endl;
ListOutput(L);
cout<<"逆置:"<<endl;
nizhi(L);
ListOutput(L);
}


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

相关推荐