//动态链表
#include <stdlib.h>
typedef struct node
{
int a;
struct node *next;
}NODE,*PNODE;
//构建链表
PNODE creat_()
{
PNODE head,q,p;//定义头指针head,代替头指针球q(头指针不能动)
head=(PNODE)malloc(sizeof(NODE));//分配内存给head
if(head==NULL)
{
printf("分配内存失败");
}
head->next=NULL;
int num,num_,i;
scanf("%d",&num);
q=head;//代替头指针q
for(i=0;i<num;i++)
{
p=(PNODE)malloc(sizeof(NODE));//开辟一个节点,并让p指向它
scanf("%d",&num_);
p->a=num_;
q->next=p;//让上一个指针指向该节点(如果是第一个结点则是头指针)
q=p;//q指针也指向p指针指向的结点
}
q->next=NULL;
return head;
}
//遍历
void traverse(PNODE head)
{
PNODE q;
q=head->next;//注意不能写q=head,应该让q指向第一个元素
while(q!=NULL)
{
printf("%d ",q->a);
q=q->next;
}
}
//判断空链表
void empty(PNODE head)//头指针
{
if(head->next==NULL)
{
printf("空");
}
else
{
printf("不空");
}
}
//测试当前节点是不是链表末尾
void islast(PNODE head)
{
if(head->next==NULL)
{
printf("是");
}
else
{
printf("不是");
}
}
//寻找一个数字在链表中的位置
PNODE find(PNODE head,int s)
{
PNODE q;
int pos=1;//记录在链表的位置
q=head->next;
while(q!=NULL)
{
if(q->a==s)
{
printf("%d",pos);
break;
}
else
{
q=q->next;
pos++;
}
}
return q;//返回地址
}
//寻找一个数字的上一个地址
PNODE find_(PNODE head,int s)
{
PNODE q=head->next;
while(q->next!=NULL && q->next->a!=s)
{
q=q->next;
}
return q;
}
//删除
void del(PNODE head,int s)//不用返回指针
{
PNODE q;
q=find_(head,s);
q->next=q->next->next;
}
//插入
void insert(PNODE head,int s)
{
PNODE q=head;
PNODE pnew=(PNODE)malloc(sizeof(NODE));//创建一个新杰蒂娜
pnew->a=s;//把插入的数据存入新节点
pnew->next=q->next;//新节点指向下一个结点
q->next=pnew;//上一个节点指向新节点
}
int lengh(PNODE head)//求链表长度
{
int i=0;
PNODE q=head->pnext;
while(q!=NULL)
{
i++;
q=q->pnext;
}
return i;
}
int main()
{
PNODE head,q,p;
head=creat_();
traverse(head);
q=find_(head,4);//寻找4的前一个数字的位置
del(head,4);//删除4
p=head->next;
printf("%d",p->a);
insert(p,5);//插入一个数字
while(p!=NULL)
{
printf("%d ",p->a);
p=p->next;
}
return 0;
}
#include <iostream>
#include <stdlib.h>
#include <stdbool.h>
#include "normal.h"
using namespace std;
typedef struct node
{
int num;
struct node* pnext;
}lnode,*linklist;
void init(linklist &head)
{
head=(linklist)malloc(sizeof(lnode));
head->pnext=NULL;
}
void create(linklist &head,int n)
{
linklist q,p;
q=head;
int i,data;
for(i=1;i<=n;i++)
{
cin>>data;
p=(linklist)malloc(sizeof(lnode));
p->num=data;
p->pnext=NULL;
q->pnext=p;
q=p;
}
q->pnext=NULL;
}
void traverse(linklist head)
{
linklist q=head->pnext;
while(q!=NULL)
{
cout<<q->num;
q=q->pnext;
}
}
bool empty(linklist head)
{
if(head->pnext==NULL)
return true;
else
return false;
}
linklist findelem(linklist head,int e)
{
linklist q=head->pnext;
while(q!=NULL && q->num!=e)
{
q=q->pnext;
}
return q;
}
int locatelem(linklist head,int i,int &e)
{
int j=1;
linklist q=head->pnext;
for(j=1;j<i;j++)
q=q->pnext;
if(q==NULL)
return ERROR;
else
e=q->num;
return OK;
}
int insert(linklist &head,int i,int e)
{
int j=0;
linklist q=head,p;
while(j<i && q!=NULL)
{
q=q->pnext;
j++;
}
if(q==NULL)
return OVERFLOW;
p=(linklist)malloc(sizeof(lnode));
p->num=e;
p->pnext=q->pnext;
q->pnext=p;
return OK;
}
int delete_(linklist &head,int i)
{
int j=0;
linklist q=head,p;
while(j<i-1 && q!=NULL)
{
q=q->pnext;
j++;
}
if(q==NULL)
return OVERFLOW;
p=q->pnext;
free(p);
q->pnext=q->pnext->pnext;
return OK;
}
int main()
{
int t;
linklist head;
init(head);
create(head,10);
delete_(head,6);
traverse(head);
}