`
xusaomaiss
  • 浏览: 615430 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

重拾算法:从链表开始

阅读更多

实现把单循环链表例置

算法的思考过程:

第一:需要保存临时数据的变量,不然无法完成倒置。

第二:要完成倒置就需要遍列,又需要一个变量

第三:用于得到最后的结果,这个暂时考虑也需要一个变量

单个节点的倒置是本身,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编写。

以上代码只是为了自己学习使用,所以在写的过程没考虑太多复杂的情况。倒置只是其中的一个问题,下一篇将写:

                                      报数出圈的问题

这也是循环链表具体使用的实例,也是我一次笔试华为的考题。

 

 

1
0
分享到:
评论

相关推荐

    c语言链表的排序算法-排序链表最快的算法是什么?.pdf

    链表排序算法的性能分析和优化 在计算机科学中,链表是一种常用的数据结构,用于存储和管理大量数据。然而,在链表中进行排序操作是一个具有挑战性的任务,因为链表的节点分布在内存中,可能会导致缓存未命中的情况...

    C例子:循环链表

    这种设计使得在遍历链表时可以更加高效,因为它可以从任何一个元素开始并持续循环到链表的起点。 `Ex012_CircleList.c` 和 `Ex012_CircleList.h` 这两个文件是用于实现和操作循环链表的源代码和头文件。下面将详细...

    数据结构和算法:链表栈递归

    这要求我们将链表的头结点视为个位数,从链表头部开始相加,逐个节点向尾部进位。由于链表的特性,这种操作的时间复杂度为O(max(n, m)),其中n和m分别是两个链表的长度。 在链表部分翻转的操作中,要求从链表的m...

    算法__链表的操作

    在IT领域,特别是数据结构与算法的学习中,链表是一个非常基础且重要的概念。链表是一种线性数据结构,其中的元素不是存储在连续的内存空间中,而是通过指针链接在一起,每个元素称为节点,包含数据部分和指向下一个...

    2009计算机考研题:查找链表中倒数第k个结点

    对于单链表而言,遍历链表时只能从头节点开始,逐个访问直到尾节点。在给定的Java源码文件`MyLinkList.java`中,很可能包含了链表节点的定义以及链表操作的相关方法。 要找到链表中的倒数第k个节点,我们可以采用...

    约瑟夫问题:循环链表,循序表,和静态链表

    - **执行算法**:从指定位置开始计数,每当数到`m`时,删除当前节点,并将指针移动到下一个节点继续计数,直到链表为空。 ```cpp for (i = 1; i ; i++) { Line[i].Data = i; Line[i].next = i + 1; if (i == ...

    课程设计:线性链表基本操作的实现

    1. **创建链表**:创建链表通常从创建一个头节点开始,该节点不包含任何数据,但它的指针域指向第一个有数据的节点,即首节点。然后,我们可以根据需要添加更多的节点。新节点的创建通常涉及动态内存分配,用`malloc...

    链表的19种算法(C语言)

    由于链表不是随机访问的,所以查找可能涉及从头节点开始逐个遍历。 5. **反转链表**:改变链表中每个节点的指针方向,使得链表的顺序反转。这可以通过迭代或递归方法实现。 6. **合并两个排序链表**:将两个已排序...

    C++算法:N个排序链表合并

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [  1->4->5,  1->3->4,  2->6 ] 输出: 1->1->2->3->4->4->5->6

    算法:C语言实现(第1~4部分)源代码

    首先,我们可以从"DS_C"这个压缩包子文件的名称推测,它可能包含了C语言实现的数据结构。数据结构是存储和组织数据的方式,包括数组、链表、栈、队列、树、图等。在C语言中,这些数据结构通常通过指针和结构体来实现...

    算法:给定一个链表,判断链表中是否存在环

    快慢指针算法是一种用于检测链表中是否存在环的有效方法,也称为“龟兔赛跑”算法。这种方法使用两个指针,一个快指针(每次移动两步),一个慢指针(每次移动一步)。 - **初始化**:将快慢指针都指向链表头结点。...

    c++写的链表综合算法设计

    - 遍历链表:从头节点开始,通过每个节点的指针访问所有节点。 4. **链表的C++实现**: - 使用`struct`或`class`定义链表节点,包含数据成员和指针成员。 - 定义链表类,包含指向头节点的指针和一些成员函数,...

    几种排序算法的实现(链表)

    这里我们主要探讨的是使用链表实现的排序算法。链表是一种非连续、非顺序的存储结构,每个元素称为节点,包含数据域和指针域,通过指针将节点串联起来。下面我们将详细解析链表实现的几种排序算法,以及它们的优缺点...

    数据结构:单向链表源码

    查找操作需要从头节点开始,逐个检查每个节点的数据域,直到找到匹配的节点或遍历完整个链表。 5. **打印链表**: 打印链表通常通过遍历每个节点并输出其数据域来完成。 6. **反转链表**: 反转链表是一个有趣...

    第一百零六天学习记录:数据结构与算法基础:链表Ⅰ(王卓教学视频)配套cpp代码

    第一百零六天学习记录:数据结构与算法基础:链表Ⅰ(王卓教学视频)配套cpp代码

    数据结构与算法:链表、二叉树、并查集、图、排序算法、贪心算法、动态规划、单调栈、KMP等.zip

    图算法包括最短路径算法(如Dijkstra算法和Floyd-Warshall算法)、拓扑排序、最小生成树(如Prim算法和Kruskal算法)等。 5. **排序算法**:排序是将一组数据按特定顺序排列的过程。常见的排序算法有冒泡排序、插入...

    实验报告2 链表倒置问题.doc

    2. **元素交换**:从链表的第一个元素开始,与最后一个元素交换位置;然后是第二个元素与倒数第二个元素交换,以此类推,直到遍历到链表的中间位置。 3. **终止条件**:当交换次数达到链表长度的一半时停止。 #####...

    插入,选择排序的链表实现及快速,希尔,冒泡排序算法实现合集

    选择排序是一种不稳定的排序算法,其基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。这个过程...

    链表深度解析:从基础到高级算法

    本章内容全面介绍了链表这一重要数据结构的基础知识、排序技巧和双指针技术,旨在帮助读者深入理解链表操作并掌握相关算法。 链表基础知识: 提供了链表的基本概念讲解,涵盖不同类型的链表结构和它们的基本操作。...

Global site tag (gtag.js) - Google Analytics