码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-08 23:12:45      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:数据   stdio.h   eof   rtl   turn   type   getc   空间   初始   

#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("\n");
}//显示链表
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\n");
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;
}

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

标签:数据   stdio.h   eof   rtl   turn   type   getc   空间   初始   

原文地址:https://www.cnblogs.com/zwjj/p/9757675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!