`
ackerman
  • 浏览: 74989 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

链表逆序的递归/非递归算法

 
阅读更多

 

/**
 *链表逆序的递归/非递归算法
 */
#include <stdio.h>
typedef int Item;
typedef struct node
{
        Item item;
        struct node *next;
}Node, *List;

/*reverse1~2是不带头结点的逆序算法*/
List reverse1(List l)
{
        Node *p1,*p2;
        if(l==NULL)
                return l;
        p1=l->next;
        l->next=NULL;
        while(p1!=NULL){
                p2=p1->next;
                p1->next=l;

                l=p1;
                p1=p2;
        }
        return l;
}
List reverse2(List l)
{
        if(l==NULL || l->next==NULL)
                return l;
        Node *p=reverse2(l->next);
        l->next->next=l;
        l->next=NULL;
        return p;
}
/*reverse3~4是带头结点链表的逆序算法*/
void reverse3(List l)
{
        Node *p1,*p2,*p3;
        if(l==NULL || l->next==NULL)
                return;
        p1=l->next;
        p2=p1->next;
        p1->next=NULL;
        while(p2!=NULL){
                p3=p2->next;
                p2->next=p1;
                p1=p2;
                p2=p3;
        }
        l->next=p1;
}
void reverse4(List l, Node *first)/*此算法不是很好,需要在函数外判断l!=NULL*/
{
        if(first==NULL || first->next==NULL){
                l->next=first;
                return;
        }
        reverse4(l,first->next);
        first->next->next=first;
        first->next=NULL;
}
分享到:
评论

相关推荐

    简单的单链表逆序 非递归

    本次讨论的核心在于如何实现单链表的逆序,特别是采用非递归方法完成这一操作。 ### 单链表逆序的重要性 单链表逆序在实际应用中具有广泛的意义。例如,在处理文本、音频或视频流时,可能需要反转数据流的顺序以...

    快速排序的非递归算法.doc

    非递归版本的快速排序则是不使用递归实现这一算法。 在给定的文档中,`quickpass` 函数实现了快速排序的主要逻辑,即“主元交换”(partition)过程。`quicksort` 函数则负责整体的控制,包括栈的管理以及主元交换...

    单链表的合并(递归-非递归)以及将单链表逆序

    单链表的合并(递归-非递归)以及将单链表逆序 单链表是数据结构中的一种基本结构,它是一种顺序存储的链式结构。单链表的合并是指将两个或多个单链表合并成一个单链表,而保持原来的顺序。单链表的逆序是指将...

    leetcode145-Algorithm:数据结构与算法学习

    链表反转:递归/非递归 链表/双向链表/队列/栈的实现 链表patition 有随机指针的链表的拷贝 队列 队列实现 双向队列实现 树 前缀树trie实现 二叉树遍历:先序/中序/后序/层序 递归/非递归 二叉树序列化与反序列化 ...

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

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

    知名公司数据结构笔试题 经典

    "知名公司数据结构笔试题 经典" 本资源总结了数据结构笔试题中的多种...链表的逆序操作可以使用递归和非递归两种方法实现。 本资源涵盖了数据结构和算法设计的多个方面,能够帮助读者更好地理解和掌握相关知识点。

    #约瑟夫问题,c#排序算法,C#非递归回溯法.pdf

    这个问题在计算机科学中被广泛研究,用于探讨循环链表、数组操作和算法设计。 在上述C#代码中,约瑟夫问题的实现是通过创建一个长度为N的数组,初始化所有元素为1,代表每个人都在圈内。然后通过一个循环,模拟报数...

    数据结构考研必背算法5星.docx

    在这个递归算法中,首先检查链表头部是否需要删除,如果需要,删除并继续处理剩余部分。如果头部不需要删除,则递归处理链表的其余部分。 4. **删除带头结点单链表中所有值为X的结点**: 这个算法同样遍历链表,...

    C语言数据结构算法总结

    二叉树的先序遍历(非递归算法)** **算法思想**:先序遍历是指根节点→左子树→右子树。非递归实现中,使用栈来存储遍历过程中的节点,以模拟递归过程。初始时,将根节点入栈。当栈不为空或当前节点不为空时,...

    数据结构算法总结

    后序遍历的非递归算法通常比前序和中序更复杂,因为它需要在访问节点前先访问其左右子树。这通常涉及到维护额外的信息来确定节点是否已经被其子树访问过。 以上数据结构和算法的总结涵盖了线性表和树的一些基本操作...

    链表、图、排序算法C语言实现.zip

    链表、图和排序算法是计算机科学中的基础数据结构和算法,它们在程序设计和问题解决中扮演着重要角色。本资源"链表、图、排序算法C语言实现.zip"包含的是用C语言编写的链表、图以及排序算法的实现代码,这对于学习和...

    数据结构算法与分析必背版

    二叉树的先序遍历(非递归算法) **算法思想:** 非递归版本的先序遍历主要通过使用栈来实现。当遍历到一个节点时,先访问该节点,然后将其地址压入栈中,再遍历其左子树。当遇到空节点时,从栈中弹出一个节点地址...

    c语言算法锦集c语言算法锦集

    - 链表:非连续存储的数据结构,每个元素称为节点,包含数据和指向下一个节点的指针。 - 树:具有层次关系的数据结构,如二叉树、AVL树、红黑树等,广泛用于数据索引和搜索。 - 队列:先进先出(FIFO)的数据结构...

    作业1 第1章1

    总结来说,本作业涵盖了数据结构与算法的基础知识,包括排序算法的实现与分析、递归与非递归问题的解决、递归算法的时间复杂度计算以及贪心算法的应用。这些知识点是计算机科学中的核心内容,对于理解和提升编程能力...

    数据结构算法

    // 二叉树的后序遍历(非递归算法)将在下一部分继续讲解。 ``` 以上就是从提供的文档内容中提取的关键知识点,包括线性表的各种操作以及二叉树的遍历方法。这些算法都是数据结构学习中的基础内容,对于理解和掌握...

    学习算法的笔记

    - 链表:单链表、双链表和环形链表。 - 哈希表:存储和查找元素的高效方式。 9. **递归与迭代**: - 递归:函数调用自身解决问题,如阶乘、斐波那契数列。 - 迭代:通过循环结构解决问题,通常比递归更节省空间...

    经典算法Java实现

    1. 冒泡排序:基础排序算法,通过不断交换相邻的逆序元素来逐步理顺数组。 2. 插入排序:将元素逐个插入到已排序部分,保持有序状态。 3. 选择排序:找到最小(或最大)的元素与当前位置交换,直到所有元素排序完成...

    2019阿里巴巴技术面试题汇总.pdf

    给出的参考代码展示了如何使用非递归的方法进行链表逆序。核心思想是遍历链表,逐个反转链表中的节点指针。这个过程中,需要维护三个指针:prev、pcur 和 next,其中 prev 用于记录当前节点的前一个节点,pcur 是...

    C常用经典算法及讲解

    3. 链表:非连续存储的数据结构,每个元素包含数据和指向下一个元素的指针。 4. 树:由节点和边构成的层次结构,如二叉树、平衡树(AVL树、红黑树)等。 5. 图:由顶点和边构成的数据结构,用于表示对象之间的关系。...

    递归.pptx

    - **非递归思路**:使用栈模拟递归的过程,通过控制节点的入栈和出栈顺序来实现不同遍历方式。 ### 总结 递归作为一种强大的编程技术,在处理具有自相似性的数据结构时非常有效。本文介绍了递归的基本概念、在树和...

Global site tag (gtag.js) - Google Analytics