关于链表的逆序排列!
关于链表逆序的中心思想就是:
用三个结点指针分别记录,第一个和第二个结点,把第一个结点后指为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;
}
注意:此为不带头的链表哦!
关于链表的逆序排列!相关推荐
- 将一个链表按逆序排列
将一个链表按逆序排列,即将链头当链尾,链尾当链头. 源程序: #include <stdio.h> #include <malloc.h> #define LEN sizeof ...
- 【c语言】数组逆序排列
问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束.然后程序将把这个数组中的值按逆序重新存放,并打印出来.要求:(1)只能定义一个数组:( ...
- python【蓝桥杯vip练习题库】ADV-103逆序排列
试题 算法提高 逆序排列 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束.然后 ...
- 单链表的逆序java_java 实现单链表的逆序
package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedR ...
- 10.14 将n个数按输入输出顺序的逆序排列,用函数实现
将n个数按输入输出顺序的逆序排列,用函数实现. #include <stdio.h>int main(){int n,i;void reverse(int * num, int n);pr ...
- 字符串按照单词为单位逆序排列
我们前面已经写过一个简单字符串逆序排序的方法,这里再开一个字符串排序问题: 给定一个字符串"I love China",编写程序完成以单词为单位的逆序,如"China l ...
- 透彻理解回文~单链表的逆序~
判断一个单链表是不是回文,主要有三种方法,不过如果要考虑空间复杂度的话,就只有常用的一种方法了. 这种方法很考验一个人的细心以及编程能力~ 前两种方法比较简单我就不祥述了~ 主要讲一下最后一种方法:直 ...
- 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)
package Four; /**题目描述* 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数* B就是A的二进制逆序数* 输入一个1000位以内的十进制整数 * */imp ...
- 大厂面试算法系列-如何实现链表的逆序(二)-递归法
导语 接着上次的内容,上次博客中展示了原地进行单链表的逆序操作,当然除了原地逆序还可以通过递归的方式进行调用操作.下面就来看看通过递归的方式如何进行单链表的逆序操作. 递归法逆序链表 假定原来 ...
最新文章
- JavaScript 中回调地狱的今生前世
- java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储
- Java集合和泛型练习及面试题——博客园:师妹开讲啦
- 程序员如何自我超越,教你一招
- CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置
- Keep Network启动下一阶段流动性挖矿计划
- 13.C++ vector 操作
- ubuntu 挂载优盘
- 设置JAVA-HOME的用处
- 谈一谈我使用AI得贤招聘官的AI面试体验之旅
- 计算机键盘设置功能键取消,键盘insert操作怎么取消?电脑键盘insert操作取消教程...
- 精度检验方法(之二分类)
- 路由器mw320虚拟服务器,新版水星MW320R路由器怎么设置_新版水星MW320R路由器设置教程-192路由网...
- RFID隧道安全管理方案
- 货代的具体工作是什么?
- Elasticsearch在各大互联网公司的应用案例
- 批量对下载的pdf文献重命名
- “深度学习“汉字国标码GB2312
- C++: 计算累积密度函数 (CDF) 非中心Beta分布(附完整源码)
- open falcon 监控php,小米监控系统open-falcon安装