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

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

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

时间: 2024-07-31 17:23:37

用单链表来实现数据的逆序的相关文章

设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来

之前有过整理链表等的概念和基本算法.比较重要的是插入,删除,遍历,建表(尾插法,头插法) 回忆链表尾部插入结点:  1 #include <iostream> 2 using namespace std; 3  4 typedef struct Node{ 5     int data;//数据域 6     Node *next;//指针域 7 } Node, *List; 8  9 //在单链表的末位添加一个结点10 void addNode(List *head, int value)1

用c++实现 c++单链表的实现(采用模板类)

函数实现数据的插入(头插&&尾插).删除(头删&&尾删).查找.按值插入.按值删除.求长.单链表清除.单链表摧毁.数据的逆置以及数据排序 main函数 #include"List.h"//单链表 void main() { List<int> mylist; int select = 1; int Item; while(select) { cout<<"*********************************

链表逆序+判断链表是否回文

单链表逆序详解 1.具有链表头的单链表 假设需要逆序的单链表为: 则逆序以后的链表为: 过程: (1)取p1指向header->next (p1=stu->next);p2保留p1->next(p2=p1->next);将p1->next置为NULL,因为单链表逆序以后,当前的p1节点为尾节点 p1->next=NULL; (2)取p3保留p2->next (p3=p2->next);将p2插入p1之前(p2->next = p1);p1指向p2指向的

如何实现链表的逆序

1 单向链表的反转 问题描述: 给定一个带头结点的单链表,请将其逆序.即如果单链表原来为head -->1 --> 2 --> 3 --> 4 --> 5,那么逆序后变为head --> 5 --> 4 --> 3 --> 2 --> 1. 解决过程: 给定一个单向链表1-->2-->3,通过下面的示意图,看如何一步一步的将单向列表反转. 代码实现: 1 class Node(object): 2 def __init__(self,

单链表及基本操作。(含练习)

1 ////////////////////////////////////////////// 2 //单链表的初始化,建立,插入,查找,删除. // 3 //(以及部分练习) // 4 //Author:Bread // 5 //Date: 2014.12.28 // 6 //Update 1th:2014.12.31 // 7 ////////////////////////////////////////////// 8 #include <stdio.h> 9 #include &l

C语言实现单链表,单链表面试题面试

单链表是学习不可缺少的一个重要模块,在面试中也会出很多的单链表变种问题,今天就把他们汇总宋总结一下 首先来是实现一个简单的单链表: (在这里,一些简单的实现单链表的操作函数就不备注了) typedef  int DataType;//typedef了一个类型,以后如果想要改变单链表节点内储存数据的类型就可以直接在这里改变 typedef struct SListNode { DataType data;           //数据 struct SListNode* next;  //指向下一

循环单链表实现

/******************************************************** * SClist.h头文件 /********************************************************/ #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<stdio.h> #include<malloc.h> #include<assert.h> typedef

线性表的两种形式的定义与相关操作(单链表和顺序表)

#include <stdio.h> #include <string.h> #include <malloc.h> #pragma warning(disable:4996) #define ERROR 0 #define OK 1 #define MAXSIZE 100 typedef int ElemType; typedef int Status; typedef struct LNode; typedef struct { ElemType *elem; in

c语言循环单链表

/************************************************************************* > File Name: singleLineTable.c > Author: zshh0604 > Mail: [email protected] > Created Time: 2014年10月15日 星期三 11时34分08秒 **************************************************