实现把单循环链表例置
算法的思考过程:
第一:需要保存临时数据的变量,不然无法完成倒置。
第二:要完成倒置就需要遍列,又需要一个变量
第三:用于得到最后的结果,这个暂时考虑也需要一个变量
单个节点的倒置是本身,1->1
两个节点的倒置1->2,可以参考两个数的交换,这就需要临时变量了
p=head; 1
q=head->next; 2
s =p ; 1
q->next = s;2->1
p->next =q; 1->2->1
三个节点。。。。。。。
//这样得到了头指针
*p=head;
//2。完成遍列的代码
*q=head->next;
while(q!=head){
q=q->next;
}
//需要一个变量保存每次倒置的链表
/*
例如:1->2->1
第一次:1
第二次:2->1
第三次:1->2->1
这样的话,变量需要在遍列体中
*/
*q=head->next;
while(q!=head){
s=p; //这样我们先得到了初始的1 之后和第二,就需要把这个框架完善
q=q->next;
}
在确定完方向后,得到下面的函数
///////////////////////////////////////////////////////////////
// 函 数 名 :invert
// 函数功能 :实现把单循环链表例置
// 处理说明 :1-->2->3->1 转成3->2->1->3
// 作者时间 : linhai
// 返 回 值 :返回倒置后的链表指针
// 参数说明 :*head 链表的头结点
// 修改记录 :
///////////////////////////////////////////////////////////////
LinkList *invert(const LinkList *head){
//为了实现倒置,引入三个变量
//*pResult用于倒置 *pNext 用于遍列链表 *pTemp 用于保存每次倒置后的指针
LinkList *pResult,*pNext,*pTemp;
pResult = head; //1
pNext = head->next; //2
while(pNext!=head){
pTemp=pResult;
//printf("pTemp=pResult=%d\r\n",pTemp->data);
pResult=pNext;
//printf("pResult=q=%d\r\n",pResult->data);
pNext = pNext->next;
//printf("q->next=%d\r\n",pNext->data);
pResult->next=pTemp;
//outList(pTemp); 输出函数
}
pNext->next=pResult; //1->3->2->1
return pResult;
}
在写函数过程中,写变量名时,一定要有意义,明白每个变量的作用,不要一个变量多种用途,这样在写的过程中也比较明白。
上传一个附件:linkDemo,本人使用CodeBlocks编写。
以上代码只是为了自己学习使用,所以在写的过程没考虑太多复杂的情况。倒置只是其中的一个问题,下一篇将写:
报数出圈的问题
这也是循环链表具体使用的实例,也是我一次笔试华为的考题。
分享到:
相关推荐
算法学习:双向链表的创建和读取
C#练习 阶段练习:实现链表(LinkedList) 简介:写一个链表的数据结构,要求实现IList接口。...4、 要求从Object派生,实现System.Collections.Generic.IList。 5、 内部存储不能使用.NET内置链表。
数据结构的双链表算法:双链表基本运算插入前插入后,循环双链表的基本运算。用C++语言写的控制台程序。
算法__链表的操作
数据结构与算法:链表、二叉树、并查集、图、排序算法、贪心算法、动态规划、单调栈、KMP等
今天小编就为大家分享一篇关于数据结构与算法:单向链表实现与封装,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6
第一百零六天学习记录:数据结构与算法基础:链表Ⅰ(王卓教学视频)配套cpp代码
链表栈递归。 给定两个链表,分别表示两个非负整数。它 们的数字逆序存储在链表中,且每个结点只 存储一个数字,计算两个数的和,并且返回 和的链表头指针
我自己写的程序,已在VC环境下调试过,非常不错!三种方法解决约瑟夫问题:循环链表,循序表,和静态链表
数据结构笔记之线性表(-):静态链表表示与实现
c语言链表的排序算法-排序链表最快的算法是什么?.pdf
通过链表实现几种排序算法,并比较它们的优劣。
数据结构:线性链表的表示以及实现(C语言编写) 有完整的代码注释以及重点分析
题目:设计一个带表头的双向链表(链表中数据的具体类型可以随意) 提供以下方法: (1)insert:在某个位置插入对象; (2)insert:在链表的最后插入对象; (3)delete:在某个位置删除对象; (4)delete:删除...
利用C++实现以下经典数据结构与算法:线性表(顺序表、链表、静态链表、三元组)、栈(双栈、共享栈)、队列(任务调度、循环队列、双向队列、链队列)、数组(特殊矩阵、稀疏矩阵压缩)、串(朴素模式匹配、KMP算法...
不错的毕业设计、课程设计、练手c++语言项目:链表HuffmanTree.rar 不错的毕业设计、课程设计、练手c++语言项目:链表HuffmanTree.rar 不错的毕业设计、课程设计、练手c++语言项目:链表HuffmanTree.rar 不错的毕业...
内容涵盖了数据结构和算法的基本原理,涉及数组、广义表、链表、散列表、树、图、排序搜索算法以及更多概率算法和动态规则等高级算法。此外,书中还提供了.NET框架类库中的C#语言实现的数据结构和算法。 《数据结构...
插入,选择排序的链表实现及快速,希尔,冒泡排序算法实现
该程序是我写的博客“一起talk C栗子吧(第十五回:C语言实例--双向链表)”的配套程序,共享给大家使用