`
ackerman
  • 浏览: 72693 次
  • 性别: 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;
}
分享到:
评论

相关推荐

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

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

    数据结构第4次作业.docx

    (2) 用先序遍历法建立二叉树二叉链表存储结构(结点数据域类型为char,输入字符序列用字符'#'表示NULL),实现中序线索化,并用非递归算法输出中序遍历结果的正序和逆序序列。 二、图 1. 已知某无向图如下图所示。画出...

    数据结构与算法实验报告

    本文档包含了用C语言实现的顺序表的插入、逆序构建链表、数制转换问题、链式结构的基本操作(构建、插入、删除)、二叉树的构建、二叉树的遍历(递归与非递归)、二分查找法、快速排序法等数据结构算法的代码与运行...

    顺序表,链表,二叉树的各种操作

    1、实现对线性表的顺序存储,并实现顺序表的插入、删除、升序合并,逆序操作 2、本程序实现了线性链表的初始化、插入、删除、...3、实现二叉树的创建,前中后序遍历,统计叶子数目,求二叉树高度的递归和非递归算法。

    知名公司数据结构笔试题及答案

    1. 把一个链表反向,递归,非递归都写一遍。 1.试编写3个函数实现  (1)建立一个双向链表  (2)插入一个节点  (3)删除一个节点 2.自己定义数据结构,写出程序:二叉树的前序遍历。 3.实现双向链表删除一个...

    西南交通大学-zhy-数据结构第4次作业.docx

    (2) 用先序遍历法建立二叉树二叉链表存储结构(结点数据域类型为char,输入字符序列用字符'#'表示NULL),实现中序线索化,并用非递归算法输出中序遍历结果的正序和逆序序列。 二、图 1. 已知某无向图如下图所示。画出...

    【swjtu】数据结构第4次作业.docx

    (1) 用先序遍历法建立二叉树二叉链表存储结构(结点数据域类型为char,输入字符序列用字符'#'表示NULL),实现中序线索化,并用非递归算法输出中序遍历结果的正序和逆序序列 1. 简答题 1. 已知某无向图如下图所示。画...

    传智播客扫地僧视频讲义源码

    04_字符串反转_方法2递归逆序(3个点)_传智扫地僧 05_考试题解答和项目开发代码书写手法 06_一级指针易错模型分析_重点 07_C语言中的const知识点总结 08_指针的输入和输出模型 09_课堂答疑_指针所指向内存释放 10_...

    数据结构(C++)有关练习题

    9、 已知f为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法: a. 求链表中的最大整数; b. 求链表的结点个数; c. 求所有整数的平均数; 告要求: 写出能运行的完整...

    C程序范例宝典(基础代码详解)

    实例091 双链表逆序输出 120 实例092 约瑟夫环 122 实例093 创建顺序表并插入元素 123 实例094 向链表中插入结点 125 实例095 从链表中删除结点 126 实例096 合并两个链表 129 实例097 单链表就地逆置...

    《数据结构 1800题》

    6.算法可以用不同的语言描述,如果用C 语言或 PASCAL语言等高级语言来描述,则算法实际上就是程序 了。( )【西安交通大学 1996 二、7(3分)】 7.程序一定是算法。( )【燕山大学 1998 二、2(2分)并改错】 8....

    c语言经典案例

    实例202 双链表逆序输出 291 实例203 约瑟夫环 293 实例204 创建顺序表并插入元素 294 实例205 合并两个链表 296 实例206 单链表节点逆置 298 实例207 应用栈实现进制转换 300 实例208 用栈实现行编辑程序 303 实例...

    世界500强面试题.pdf

    1.4.1. 递归和非递归俩种方法实现二叉树的前序遍历.................................... 73 1.4.2. 请修改 append 函数,利用这个函数实现............................................. 78 1.4.3. 有 n 个长为 m+...

Global site tag (gtag.js) - Google Analytics