用单链表来实现数据的逆序

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;
}













































































以上是关于用单链表来实现数据的逆序的主要内容,如果未能解决你的问题,请参考以下文章

算法习题---线性表之单链表逆序打印

2.设计一个算法,将单链表中结点以逆序排列。逆序的单链表中的结点均为原表中的结点

(单链表)单链表的整体逆序和局部逆序

单链表逆置

链表实现单链表的逆序

数据结构——20 单链表逆序