链表的基本操作
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
typedef struct LNode{
int data;
struct LNode *next;
}Lnode, *LinkList;
int GetElem_L(LinkList L,int i,int &e)
{
LinkList p=L->next;int j=1;
while (p&&j<i){
p=p->next;++j;
}
if (!p||j>i)return 0;
e=p->data;
return 1;
}
int ListIsert_L(LinkList &L,int i,int e)
{
LinkList p=L;int j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p) return 0;
LinkList s=(LinkList)malloc (sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
return 1;
}
int ListDelete_L(LinkList &L,int i,int &e){
LinkList p=L;int j=0;
while (p->next&&j<i-1){
p=p->next;++j;
}
if(j>i-1)return 0;
LinkList q=p->next; p->next=q->next;
e=q->data; free(q);
return 1;
}
void CreateList_L(LinkList &L,int n){
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for (int i=n;i>0;--i){
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;L->next=p;
}}
int printf_L(LinkList L)
{
LinkList p=L->next;
printf("单链表中元素为:");
while(p){
printf ("%-4d",p->data);
p=p->next;
}
printf("\n");
return 0;
}
int main (){
LinkList L;
int c;
printf("请逆位数输入10个元素的值,建立表头结点的单链表L:");
CreateList_L(L,10);
printf_L(L);
int e,i;
printf("请输入需要查找的第i个元素:");
scanf("%d",&i);
GetElem_L(L,i,e);
printf("其值为:%d\n",e);
printf("请输入插入的位置和元素:");
scanf("%d%d",&i,&e);
ListIsert_L(L,i,e);
printf_L(L);
printf("请输入需要删除的第i个元素:");
scanf("%d",&i);
ListDelete_L(L,i,e);
printf("其值为:%d\n",e);
printf_L(L);
}