一.创建链表
链表结构体:
typedef struct list{
int data;
struct list *next;
}*List,listsize;//listsize为结构的长度包括指针和数据,方便分配空间
创建链表函数:
void createlist(List &L)
{
int i=0,n;
List head,p;
L = (List)malloc(sizeof(listsize));
head = (List)malloc(sizeof(listsize));
head = L;
L->next = NULL;
printf("请输入元素的个数:");
scanf("%d",&n);
while(n>0 && i<n)
{
p = (List)malloc(sizeof(listsize));
scanf("%d",&p->data);
L->next = p;
L=p;
i++;
}
L->next = NULL;
L=head;
}
二.打印链表
void print(List L)
{
while(L->next!=NULL)
{
printf("%d ",L->next->data);
L = L->next;
}
printf("\n");
}
三.判断链表是否非递增有序
int opinion(List L)
{
while(L->next->next!=NULL)
{
if(L->next->data < L->next->next->data)
return 0;
L=L->next;
}
return 1;
}
四.删除链表重复元素
void delate (List &L)
{
List p,q;
p=(List)malloc(sizeof(listsize));
q=(List)malloc(sizeof(listsize));
p=L->next;
q=p->next;
while(q)
{
while(q && p->data == q->data)
q=q->next;
p->next = q;
p=q;
if(!q)
break;
q=q->next;
}
}
五.逆置链表
void against(List &L)
{
int i;
List p,q,r;
p = L;
q = p->next;
r = q->next;
p->next = NULL;
while(p&&q)
{
q->next = p->next;
p->next = q;
q = r;
if(r)
r = r->next;
}
}
六.完整代码
#include<stdio.h>
#include<stdlib.h>
typedef struct list{
int data;
struct list *next;
}*List,listsize;//listsize为结构的长度包括指针和数据,方便分配空间
//创建链表
void createlist(List &L)
{
int i=0,n;
List head,p;
L = (List)malloc(sizeof(listsize));
head = (List)malloc(sizeof(listsize));
head = L;
L->next = NULL;
printf("请输入元素的个数:");
scanf("%d",&n);
while(n>0 && i<n)
{
p = (List)malloc(sizeof(listsize));
scanf("%d",&p->data);
L->next = p;
L=p;
i++;
}
L->next = NULL;
L=head;
}
//打印链表
void print(List L)
{
while(L->next!=NULL)
{
printf("%d ",L->next->data);
L = L->next;
}
printf("\n");
}
//判断链表是否为非递增有序
int opinion(List L)
{
while(L->next->next!=NULL)
{
if(L->next->data < L->next->next->data)
return 0;
L=L->next;
}
return 1;
}
//删除链表中的多余元素
void delate (List &L)
{
List p,q;
p=(List)malloc(sizeof(listsize));
q=(List)malloc(sizeof(listsize));
p=L->next;
q=p->next;
while(q)
{
while(q && p->data == q->data)
q=q->next;
p->next = q;
p=q;
if(!q)
break;
q=q->next;
}
}
//逆置链表
void against(List &L)
{
int i;
List p,q,r;
p = L;
q = p->next;
r = q->next;
p->next = NULL;
while(p&&q)
{
q->next = p->next;
p->next = q;
q = r;
if(r)
r = r->next;
}
}
int main()
{
List L;
createlist(L);//创建链表
printf("打印第一次创建的链表:");
print(L);//打印链表
delate(L);//删除链表的多余元素
printf("删除重复元素后的链表:");
print(L);//打印删除多余元素的链表
if(opinion(L))//判断链表是否为非递增有序
{
printf("你输入的数据是非递增有序的\n");
against(L);//逆置链表
printf("逆置后的链表");
print(L);//打印逆置后的链表
return 0;//程序结束
}
else
{
printf("你输入的数据不是非递增有序的\n");
exit(0);
}
}
输入:
输出: