题目描述
建立长度为n的单链表,删除第i个结点之前的结点。
输入
第一行为自然数n,表示链式线性表的长度;
第二行为n个自然数表示链式线性表各元素值;
第三行为指定的删除参数i。
输出
指定删除位置合法时候,输出删除元素后的链式线性表的所有元素,元素之间用一个空格隔开。
输入不合法,输出"error!"。
样例输入
5
1 2 3 4 5
3
样例输出
1 3 4 5
参考程序
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LinkNode;
void Creat(LinkNode *&L, int n)
{
L = (LinkNode *)malloc(sizeof(LinkNode));
LinkNode *p,*q;
p=L;
for(int i=0; i<n; i++)
{
q=(LinkNode *)malloc(sizeof(LinkNode));
scanf("%d", &q->data);
p->next=q;
p=q;
}
p->next=NULL;
}
bool DeNode(LinkNode *&L, int i, int n)
{
if(i<=1 || i>n) return false;
else
{
LinkNode *p, *q;
p=L;
if(i==2)
{
L->next=p->next->next;
}
else
{
for(int j=1; j<i-1;j++)
p=p->next;
q=p->next;
p->next=q->next;
free(q);
}
return true;
}
}
int print(LinkNode *L)
{
LinkNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
}
int main()
{
int n, i;
scanf("%d",&n);
LinkNode *L;
Creat(L, n);
scanf("%d", &i);
if(DeNode(L, i, n))
print(L);
else
printf("error!");
return 0;
}
注意
该程序仅供学习参考!