建立长度为n的单链表,删除第i个结点之前的结点。
输入
第一行为自然数n,表示链式线性表的长度; 第二行为n个自然数表示链式线性表各元素值; 第三行为指定的删除参数i。
输出
指定删除位置合法时候,输出删除元素后的链式线性表的所有元素,元素之间用一个空格隔开。 输入不合法,输出"error!"。
样例输入
5 1 2 3 4 5 3
样例输出
1 3 4 5
#include <iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode
{
int date;
struct LNode *next;
}LinkNode;
void InitLinkNode(LinkNode *&L)//初始化
{
L =(LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
}
bool CreatLinkNode(LinkNode *&L,int n,int a[])
{
LinkNode *r,*s;
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 DestoryLinkNode(LinkNode *&L)//销毁单链表
{
LinkNode *p = L->next,*pre=L;
while (p!=NULL)
{
free(pre);
pre = p;
p = pre ->next;
}
free(pre);
}
void TravleLinkNode(LinkNode *&L)//遍历单链表
{
LinkNode *p=L->next;
while (p!=NULL)
{
cout<<p->date<<" ";
p = p->next;
}
}
bool DeleteLinkNode(LinkNode *&L,int i)//删除结点
{
LinkNode *p=L,*q;
if(i!=2)
{
for(int j=1;j<i-1;j++)
{
p = p->next;
if(p==NULL)
{
return false;
}
}
}
else
{
p = L;
}
q = p->next;
if(q ==NULL)
{
return false;
}
p ->next = q->next;
free(q);
return true;
}
int main(int argc, const char * argv[]) {
int n,e;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
LinkNode *L;
InitLinkNode(L);
cin>>e;
if(e<2 || e>n+1)
{
cout<<"error!";
}
else
{
CreatLinkNode(L, n, a);
DeleteLinkNode(L, e);
TravleLinkNode(L);
}
DestoryLinkNode(L);
return 0;
}