#include<stdio.h>
#include <stdio.h>
#include<stdlib.h>
int num=0;
struct list{
int val;
struct list*next;
};
//创建链表函数
struct list* creat()
{
struct list* head,p;
struct list*q;//q为前,p为后
head=NULL;
printf("想创建的结点的个数:");
scanf("%d",&num);
for(int i=0;i<num;i++)
{
int val;
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);
struct list *p=(struct list*)malloc(sizeof(struct list));
p->val=val;
p->next=NULL;
if(head==NULL)//判断是否为第一个节点,如果是头指针指向当前节点
{
head=p;
}
else{
q->next=p;//将新创建的指针p连接到当前指针上
}
q=p;//使q也移动到当前节点
}
return head;
}
//打印链表函数
void travel(struct list* head)
{
struct list *p=head;
while(p!=NULL)
{
printf("%d ",p->val);
p=p->next;
}
}
//插入函数
struct list* insert(struct list* head) {
int n;int m; int flag=0;
while(flag==0)
{
printf("请输入要插入在第几个数之后:\n");
scanf("%d",&m);
if(m>num)
{
printf("插入失败,请重新输入:");
flag=0;
}
else
flag=1;
}
printf("请输入要插入的数值:\n");
scanf("%d",&n);
struct list* p = head;
struct list* s = (struct list*)malloc(sizeof(struct list));
s->val = n;
for (int i = 1; i < m; ++i) {
p = p->next;
}
s->next = p->next;
p->next = s;
return head;
}
//删除函数
struct list* delete(struct list* head)
{
int m;
printf("请输入要删除第几个数的位置:\n");
scanf("%d",&m);
struct list* p = (struct list*)malloc(sizeof(struct list));
p = head;
for(int i = 2; i < m; ++i)
{
p = p->next;
}
if(m>num)
{
printf("删除失败");
return 0;
}
p->next=p->next->next;
return head;
}
//反转函数
struct list* resever(struct list*head)
{
struct list* n1 = (struct list*)malloc(sizeof(struct list));
struct list* n2 = (struct list*)malloc(sizeof(struct list));
struct list* n3= (struct list*)malloc(sizeof(struct list));
n1=NULL;
n2=head;
n3=head->next;
if(head=NULL)
return NULL;
while(n2)
{
//反转
n2->next=n1;
//迭代移动
n1=n2;
n2=n3;
if(n3)
n3=n3->next;
}
return n1;
}
int main()
{
struct list *node;
node=creat();
node=resever(node);
travel(node);
}