建立长度为n的单链表,在第i个结点之前插入数据元素data。
输入
第一行为自然数n,表示链式线性表的长度; 第二行为n个自然数表示链式线性表各元素值; 第三行为指定插入的位置i;第四行为待插入数据元素data。
输出
指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。输入不合法,输出"error!"。
样例输入
5 1 2 3 4 5 3 6
样例输出
1 2 6 3 4 5
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode
{
int date;
struct LNode *next;
} LinkNode;
//初始化链表
void InitList(LNode *&L)
{
L = (LinkNode *) malloc(sizeof(LinkNode));
L->next = NULL;
}
//创建链表 使用尾插法
bool CreatList(LNode *&L,int n,int a[])
{
LinkNode *s,*r;
L = (LinkNode*)malloc(sizeof(LinkNode));
r = L;
for(int i=0;i<n;i++)
{
s = (LinkNode*)malloc(sizeof(LinkNode));
s->date = a[i];
r->next = s;
r = s;
}
r ->next = NULL;
return true;
}
//销毁链表
void DestroyList(LinkNode *&L)
{
LinkNode *pre = L ,*p = L->next;
while(p!=NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
//遍历链表
void TravelList(LNode *&L)
{
LinkNode *p = L->next;
while (p!=NULL)
{
cout<<p->date;
p = p->next;
cout<<" ";
}
//cout<<endl;
}
//在相应位点插入原
bool InsertElem(LNode *&L, int i,int e)
{
int j = 1;
LNode *p,*s;
p = L->next;
//使指针p指向位点i之前
if(i!=1)
{
while(j<i-1)
{
p = p->next;
j++;
}
if(p==NULL)
{
cout<<"error!";
return false;
}
}
else
{
p=L;
}
//在位点i之前插入元素
s = (LNode *)malloc(sizeof(LNode));
s ->date = e;
s->next = p->next;
p->next = s;
TravelList(L);
return true;
}
int main(int argc, const char * argv[]) {
LNode *L;
InitList(L);
int n;
cin>>n;
int a[n];
for(int j=0;j<n;j++)
{
cin>>a[j];
}
CreatList(L, n, a);
int i,e;
cin>>i>>e;
if(i>0)
{
InsertElem(L, i, e);
}
else
{
cout<<"error!";
}
DestroyList(L);
return 0;
}