链表的基本操作
1.输入内容
2.在指定的位置之前插入节点
3.在指定的位置之后插入节点
4.删除节点
5.翻转节点 (没有实现)
#include<stdio.h>
#include<stdlib.h>
typedef struct link{
struct node *start;
struct node *end;
int linklen;
}link;
typedef struct node{
struct node *next;
int data;
}node;
void init(link *p)
{
node *newnode=(node *)malloc(sizeof(node));
newnode->next=NULL;
p->start=newnode;
p->end=newnode;
p->linklen=0;
}
void add(link *p)
{
printf("end input 0\n");
while(1)
{
printf("input data\n");
int data;
scanf("%d",&data);
if(data==0)
break;
node *newnode=(node *)malloc(sizeof(node));
newnode->data=data;
newnode->next=NULL;
(p->end)->next=newnode;
p->end=newnode;
(p->linklen)+=1;
}
}
void output(link *n)
{
node *p;
p=(n->start)->next;
while(p)
{
printf("%d->",p->data);
p=p->next;
}
printf("NULL\n");
}
node *findnode(int index,link *p)
{
node *n=p->start;
int i;
for(i=0;i<index;++i)
{
n=n->next;
}
return n;
}
void finsert(link *p)
{
printf("insert end input 0\n");
while(1)
{
int index;
int data;
start:
printf("input insert index\n");
scanf("%d",&index);
if(index==0)
break;
printf("input data\n");
scanf("%d",&data);
if(index>p->linklen)
{
printf("index error\n");
goto start;
}
node *newnode=(node *)malloc(sizeof(node));
newnode->data=data;
newnode->next=NULL;
node *n=findnode(index-1,p);
newnode->next=n->next;
n->next=newnode;
(p->linklen)+=1;
}
}
void binsert(link *p)
{
printf("insert end input 0\n");
int data,index;
node *n=p->start;
while(1)
{
start:
printf("input index\n");
scanf("%d",&index);
if(index>p->linklen)
{
printf("index error\n");
goto start;
}
if(index==0)
break;
printf("input data\n");
scanf("%d",&data);
for(int i=0;i<index;++i)
{
n=n->next;
}
node *newnode=(node *)malloc(sizeof(node));
newnode->data=data;
newnode->next=n->next;
n->next=newnode;
(p->linklen)+=1;
}
}
void delnode(link *p)
{
int index;
node *n=p->start;
printf("input index\n");
scanf("%d",&index);
for(int i=0;i<index-1;++i)
{
n=n->next;
printf("a");
}
if(index==p->linklen)
{
free(n->next);
n->next=NULL;
p->end=n;
}
else
{
n->next=(n->next)->next;
//free(n->next); have problem
}
(p->linklen)-=1;
}
int main()
{
link p;
init(&p);
add(&p);
output(&p);
finsert(&p);
output(&p);
binsert(&p);
output(&p);
delnode(&p);
output(&p);
}