#include<stdio.h>
#include <stdlib.h>
struct Node
{
int num;
struct Node *pNext;
};
struct Node *head=NULL;
void AddNode(int value)//从头结点开始加入节点
{
struct Node *p;
p=(struct Node *)malloc(sizeof(struct Node));
if (p==NULL)
{
printf("分配内存失败");
}
p->num=value;
p->pNext=head;
head=p;
}
void Printall()//打印链表数据
{
struct Node *p=head;
while(p!=NULL)
{
printf("%d\t",p->num);
p=p->pNext;
}
}
void Delete(int value)//删除链表中数据(本函数可以删除链表中与value值相等的所有数据)
{
struct Node *curr=head;
struct Node *prev=NULL;
while (curr!=NULL)
{
if (curr->num==value)
{
if (curr==head)
{
head=curr->pNext;
free(curr);
curr=head;
//加break可以保证只对相同数据删除一次
}
else
{
prev->pNext=curr->pNext;
free(curr);
curr=prev->pNext;
//加break可以保证只对相同数据删除一次
}
}
else
{
prev=curr;
curr=curr->pNext;
}
}
}
void Reverse()//逆置链表
{
if (head==NULL)
{
printf("链表为空");
}
else if (head->pNext==NULL)
{
printf("链表只有一个节点");
}
else
{
struct Node *p1,*p2,*p3;
p1=head;
p2=p1->pNext;
while(p2!=NULL)
{
p3=p2->pNext;
p2->pNext=p1;
p1=p2;
p2=p3;
}
head->pNext=NULL;
head=p1;
}
}
void Sortlist()//冒泡排序,对链表进行排序
{
struct Node *p1;
struct Node *p2;
for (p1=head;p1!=NULL;p1=p1->pNext)
{
for (p2=head;p2!=NULL;p2=p2->pNext)
{
if ((p1->num) < (p2->num))
{
p1->num = (p1->num) ^ (p2->num);
p2->num = (p1->num) ^ (p2->num);
p1->num = (p1->num) ^ (p2->num);
}
}
}
Printall();
}
void main1()
{
AddNode(1);
AddNode(2);
AddNode(3);
AddNode(4);
AddNode(5);
Printall();
printf("\n");
Sortlist();
//Reverse();
//Printall();
//printf("\n");
//Delete(5);
//Printall();
//printf("\n");
//Delete(1);
//Printall();
//printf("\n");
system("pause");
}