#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next; //後繼指針
};
int Length(struct node *head)//求表的長度
{
struct node *t=NULL;
t=head;
int n=0;
while(t!=NULL)
{
t=t->next;
n++;
}
return n;
}
int search1(struct node *head,int index)//根據序號查找返回值
{
struct node *t=NULL;
t=head;
int j=1;
while(t!=NULL&&j<index)
{
t=t->next;
j++;
}
if(index==j)
return t->data;
else
return 0;
}
int search2(struct node *head,int x) //按值查找返回位置
{
struct node *t=NULL;
t=head;
int j=1;
while(t!=NULL&&t->data!=x)
{
t=t->next;
j++;
}
if(t->data==x)
return j;
else
return 0;
}
void Delete(struct node *head,int index) //刪除鏈表中某個位置的
{
struct node *t=NULL,*q=NULL;
t=head;
int j=1;
while(t!=NULL&&j<index-1)
{
t=t->next;
j++;
}
q=t->next;
t->next=q->next;
free(t);
t=head;
while(t!=NULL)
{
printf("%d ",t->data);
t=t->next;
}
}
void AllDelete(struct node *head) //整個表的刪除
{
struct node *t=NULL,*q=NULL;
t=head;
while(t!=NULL)
{
q=t->next;
free(t);
t=q;
}
head=NULL;
}
int main()
{
struct node *head=NULL,*p,*q=NULL,*t=NULL; //初始化爲空
int n,i,a;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
p=(struct node *)malloc(sizeof(struct node)); //分配動態空間
p->data=a;
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p; //q做爲臨時保存
q=p;
}
printf("表的長度:%d\n",Length(head));
printf("位置1的值:%d\n",search1(head,1));
printf("值爲4的位置%d\n",search2(head,4));
Delete(head,3);//刪除位置爲3的節點
scanf("%d",&a); //插入
t=head;
while(t!=NULL)
{
if(t->next->data>a) //找到位置
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t->next; //後接
t->next=p; //前接
break;
}
t=t->next;
}
//輸出
t=head;
while(t!=NULL)
{
printf("%d ",t->data);
t=t->next;
}
AllDelete(head); //刪除整個表
}