关于链表逆序的中心思想就是:
 用三个结点指针分别记录,第一个和第二个结点,把第一个结点后指为NULL,由首结点作为尾结点。然后把第二个指向第一个,再然后同

时移动,使第二个结点为第三个结点,第一个结点为第二个结点。就这样依次串连就得到一个逆序的链表了。呵呵,以前我没想到这个方法时,自己

想了个超级笨的,就是遍历出结点的个数,然后用个双重循环不停的找到最后一个结点然后串连,用的是顺序表的思想,实在是愚笨啊,呵呵,思想

差不多就这样,搞不懂就自己画图表示,下面结合代码:

#include <stdio.h>
struct Node
{
int data;
struct Node *next;
};
typedef struct Node Node;
Node * converse(Node *_head); //逆序的函数
int main()
{
Node a,b,c,d;   //为方便演示创建一个简单链表
Node *head,*current;
a.data=1;
a.next=&b;
b.data=2;
b.next=&c;
c.data=3;
c.next=&d;
d.data=4;
d.next=NULL;
head = &a;
current=head;  //为方便演示创建一个简单链表
while(current!=NULL)
{
printf("the value is %d\n",current->data);
current=current->next;
}      //输出逆序前的链表
head=converse(head);
printf("the converse order is :\n");
current=head;
while(current != NULL)
{
printf("the value is :%d\n",current->data);
current=current->next;
}     //输出逆序后的链表
return 0;
}
Node * converse(Node *_head)
{
Node *current1,*current2,*current3,*head;
head=_head;
if(head == NULL)
return NULL;    //如果链表为空则返回空
else if(head->next==NULL)
return head;    //如果只有一个结点则返回
current1=head->next;    //找到第二个结点
current2=head->next;    //同样指向第二个结点
current3=head;     //指向head结点也就是第一个结点
current3->next=NULL;    //把第一个结点为最后一个,指向NULL
while(current1->next!=NULL)
{
current1=current1->next;  //找到后一个结点
current2->next=current3;  //把第二个结点后指第一个结点
current3=current2;   //然后把尾结点往前移动到第二个结点
current2=current1;   //同样后移到第三个结点
}
current2->next=current3;
head=current2;    //返回逆序后的结点
return head;
}

注意:此为不带头的链表哦!

关于链表的逆序排列!相关推荐

  1. 将一个链表按逆序排列

    将一个链表按逆序排列,即将链头当链尾,链尾当链头. 源程序: #include <stdio.h> #include <malloc.h> #define LEN sizeof ...

  2. 【c语言】数组逆序排列

    问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束.然后程序将把这个数组中的值按逆序重新存放,并打印出来.要求:(1)只能定义一个数组:( ...

  3. python【蓝桥杯vip练习题库】ADV-103逆序排列

    试题 算法提高 逆序排列 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束.然后 ...

  4. 单链表的逆序java_java 实现单链表的逆序

    package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedR ...

  5. 10.14 将n个数按输入输出顺序的逆序排列,用函数实现

    将n个数按输入输出顺序的逆序排列,用函数实现. #include <stdio.h>int main(){int n,i;void reverse(int * num, int n);pr ...

  6. 字符串按照单词为单位逆序排列

    我们前面已经写过一个简单字符串逆序排序的方法,这里再开一个字符串排序问题: 给定一个字符串"I love China",编写程序完成以单词为单位的逆序,如"China l ...

  7. 透彻理解回文~单链表的逆序~

    判断一个单链表是不是回文,主要有三种方法,不过如果要考虑空间复杂度的话,就只有常用的一种方法了. 这种方法很考验一个人的细心以及编程能力~ 前两种方法比较简单我就不祥述了~ 主要讲一下最后一种方法:直 ...

  8. 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)

    package Four; /**题目描述* 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数* B就是A的二进制逆序数* 输入一个1000位以内的十进制整数 * */imp ...

  9. 大厂面试算法系列-如何实现链表的逆序(二)-递归法

    导语   接着上次的内容,上次博客中展示了原地进行单链表的逆序操作,当然除了原地逆序还可以通过递归的方式进行调用操作.下面就来看看通过递归的方式如何进行单链表的逆序操作. 递归法逆序链表   假定原来 ...

最新文章

  1. JavaScript 中回调地狱的今生前世
  2. java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储
  3. Java集合和泛型练习及面试题——博客园:师妹开讲啦
  4. 程序员如何自我超越,教你一招
  5. CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置
  6. Keep Network启动下一阶段流动性挖矿计划
  7. 13.C++ vector 操作
  8. ubuntu 挂载优盘
  9. 设置JAVA-HOME的用处
  10. 谈一谈我使用AI得贤招聘官的AI面试体验之旅
  11. 计算机键盘设置功能键取消,键盘insert操作怎么取消?电脑键盘insert操作取消教程...
  12. 精度检验方法(之二分类)
  13. 路由器mw320虚拟服务器,新版水星MW320R路由器怎么设置_新版水星MW320R路由器设置教程-192路由网...
  14. RFID隧道安全管理方案
  15. 货代的具体工作是什么?
  16. Elasticsearch在各大互联网公司的应用案例
  17. 批量对下载的pdf文献重命名
  18. “深度学习“汉字国标码GB2312
  19. C++: 计算累积密度函数 (CDF) 非中心Beta分布(附完整源码)
  20. open falcon 监控php,小米监控系统open-falcon安装

热门文章

  1. Python爬虫 | 代理IP的获取和使用
  2. 关于嵌入式常用显示屏的总结
  3. 信安专业学生-必考认证证书( 2023.1-6月 CISP/NISP考试安排)
  4. POJ 1849 Two
  5. C++数据结构实验--图的基本操作
  6. 蓝牙基带数据传输机理分析
  7. 这 7 款程序员免费在线画图工具,贼好用!
  8. 简述同步和异步的区别
  9. Ubuntu查看一些版本 1
  10. nonlocal和global的区别