对单链表 插入 删除 查找 逆置 交换 求最值 删除相同元素操作
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define INITSIZE 1000
#define INCRE 20
#define OK 1
#define ERROR 0
typedef struct node{
int data;
struct node *next;
}node,*pnode;
pnode init_node(){
pnode head=(pnode)malloc(sizepf(pnode));
head->next=NULL;
}
int insert(pnode head,int i,int e)
{
pnode p=head;
int j=0;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i+1){
return 0;
}
pnode pnew=(pnode)malloc(sizeof(node));
pnew->data=e;
pnew->next=NULL;
pnew->next=p->next;
p->next=pnew;
return 1;
}
int delete_(pnode head,int pos,int *val)
{
pnode p=head;
int j=0;
while(p&&j<pos-1)
{
p=p->next;
j++;
}
if(!p&&j>pos)
{
return 0;
}
pnode s;
s=p->next;
*val=s->data;
p->next=s->next;
free(s);
return 1;
}
int find1(pnode head,int pos,int *val)
{
int i=0;
pnode p=haed;
while(p&&i<pos){
p=p->next;
i++;
}
if(!p&&i>pos){
return 0;
}
*val=p->data;
return 1;
}
int find2(pnode head,int *pos,int val){
pnode p=head;
int i=0;
while(p)
{
if(val==p->data)
{
*pos=i+1;
}
p=p->next;
i++;
}
return 0;
}
int nizhi(pnode head)
{
pnode p,q,r;
p=head->next;
q=p->next;
p->next=NULL;
while(q)
{
r=q->next;
q->next=head->next;
head->next=q;
q=r;
}
return 0;
}
int sort(pnode head)
{
pnode p,q;
int t;
for(p=head->next;p;p=p->next)
{
for(q=p->next;q;q=q->next)
{
if(p->data==q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
}
int delete1(pnode head,int x,int y)
{
pnode p=head;
pnode q=head->next;
while(q)
{
if(q->data>x&&q->data<y)
{
p->next=q->next;
pnode s=q;
q=q->next;
free(s);
}else{
p=p->next;
q=q->next;
}
}
}
int jiaohuan1(pnode head,int pos)
{
int i=0;
pnode p=head;
while(p&&i<pos-1)
{
p=p->next;
i++;
}
if(!p&&i>pos-1) return 0;
pnode s=p->next;
pnode r=s->next;
s->next=r->next;
p->next=r;
r->next=s;
}
int jiaohuan2(pnode head,int pos)
{
pnode p,q,r;
p=head->next;
while(p)
{
q=p->next;
if(q->data==val)
{
break;
}
p=p->next;
}
r=q->next;
q->next=r->next;
p->next=r;
r->next=q;
}
int len(pnode head)
{
int len=0;
pnode p=head->next;
while(p)
{
len++;
p=p->next;
}
return len;
}
int change(pnode head,int pos,int val)
{
pnode p=head;
int i=0;
while(p&&i<pos)
{
p=p->next;
i++;
}
if(!p&&i>pos) return 0;
p->data=val;
return 1;
}
int getmax(pnode haed)
{
int max;
pnode p=head->next;
max=p->data;
while(p)
{
if(max<p->data){
max=p->data;
}
p=p->next;
}
return max;
}
int insert_sort(pnode head,int x){
pnode p=head;
pnode pnew=(pnode)malloc(sizeof(node));
pnew->data=x;
pnew->next=NULL;
while(p->next->data<x&&p->next!=NULL)
{
p=p->next;
}
pnew->next=p->next;
p->next=pnew;
}
int delete_same_node(pnode head)
{
pnode p,q;
p=head->next;
while(p)
{
q=p;
while(q->next!=NULL)
{
if(p->data==q->next->data)
{
pnode s=q->next;
q->next=p->next;
free(s);
}else{
q=q->next;
}
}
p=p->next;
}
}
int main(){
return 0;
}
总结
复习单链表的基本操作