用单链表来实现数据的逆序
Posted zwjj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用单链表来实现数据的逆序相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;//节点数据
struct node *next;//节点指针,该指针指向该节点的下一节点
}listnode,*list;//list指向该节点
//初始化单链表
list initlist(void)
{
list mylist=malloc(sizeof(listnode));//malloc分配空间,创建节点,以此为头节点,并用指针mylist指向它
if(mylist!=NULL)
{
mylist->next=NULL;
}//判断空间是否分配成功,如果成功,则将头节点的节点指向空
return mylist;
}
//返回头节点的指针
list newnode(int n)
{
list new=malloc(sizeof(listnode));
if(new!=NULL)
{
new->data=n;
new->next=NULL;
}
return new;
}
//创建一个新结点
void insertlist(list new,list mylist)
{
list p=mylist;
if(new==NULL)
return;
while(p->next!=NULL)
{
p=p->next;
}
new->next=p->next;
p->next=new;
}
//在链表的后面插入一个new结点
//在链表插入节点要经过以下几个步骤。1、确定要在那里插入。2、将要插入的指针指向被插入节点的next指针(new->next=p->next;),将被插入的节点的next指针指向要插入的节点(p->next=new;)
void showlist(list mylist)
{
list q=mylist->next;
while(q!=NULL)
{
printf("%d",q->data);
q=q->next;
}
printf("
");
}//显示链表
void revert(list mylist)
{
list p=mylist->next;//p为首元节点
list tmp;
tmp=p->next;(这里必须要对tmp先赋值,如果先执行mylist->next=NULL,会出现段错误)
mylist->next=NULL;
while(tmp!=NULL)
{
tmp=p->next;
p->next=mylist->next;
mylist->next=p;
p=tmp;
}
}//逆序函数,从首元节点开始,将每一个节点插入到头节点之后,直到最后一个节点,这样最后一个节点就会被放到首元节点啦。
int main()
{ int n,j;
list mylist=initlist();//定义头指针,并让它指向头结点
printf("请输入链表个数j
");
scanf("%d",&j);
while(j>0)
{
scanf("%d",&n);
list new=newnode(n);
insertlist(new,mylist);
--j;
}
showlist(mylist);
revert(mylist);
showlist(mylist);
getchar();
return 0;
}
以上是关于用单链表来实现数据的逆序的主要内容,如果未能解决你的问题,请参考以下文章