`
zjjzmw1
  • 浏览: 1366559 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

链表的创建,输出,翻转

c 
阅读更多

/*
 0 2 4 6 8
 8 6 4 2 0
 Press any key to continue
 */
#include <stdio.h>
#include <stdlib.h>

#define ELTYPE int

typedef struct node {
    ELTYPE m;
    struct node *next;
} *NODE;

void InversionNode(NODE head) {
    NODE p,t,q;
    p = NULL;
    t = head->next;
    q = t->next;
    if(t == NULL || q == NULL) return; // 空表和仅有一个结点的链表不用倒置
    while(q) {
        t->next = p; // 倒置结点
        p = t;       // p指向新倒置的结点
        t = q;       // 前进一个结点
        q = q->next;
    }
    t->next = p;     // 处理最后一个结点
    head->next = t;  // head指向倒置后的链表
}

void ShowNode(NODE head) {
    NODE p = head->next;
    for(;p;p = p->next){
        printf("%d ",p->m);
    }
    printf("\n");
}

NODE CreatNode(int n) { // 创建有头结点的单向链表
    int i;
    NODE head,p,q;
    head = p = (NODE)malloc(sizeof(struct node));
    for(i = 0; i < n; ++i) {
        q = (NODE)malloc(sizeof(struct node));
        q->m = 2 * i;
        p->next = q;
        p = q;
    }
    p->next = NULL;
    return head;
}

int main() {
    NODE head = CreatNode(8);
    ShowNode(head);
    InversionNode(head);
    ShowNode(head);
    return 0;
}

分享到:
评论

相关推荐

    K 个一组翻转链表1

    我们可以创建一个虚拟头节点 `sentinel`,使得处理链表的开头变得简单。然后,我们用一个指针 `trunk` 指向虚拟头节点。在主循环中,我们检查是否还有足够的节点可以进行翻转,如果不足 k 个节点,则停止翻转。接...

    手写单链表翻转(递归和非递归)

    然后创建链表类,包含初始化、输入、输出、翻转(非递归)、翻转(递归)和获取头节点的私有方法。在翻转(非递归)函数中,设置current、pnext和ptr三个指针,并通过循环进行翻转操作。递归翻转函数则通过递归调用...

    单链表综合实验.docx

    在本实验中,我们将实现一个单链表的类,包括链表的创建、链表元素的插入、链表元素的查找、链表元素的删除、打印所有的链表元素、翻转链表等操作。 链表的创建 在本实验中,我们使用模板类来实现单链表,链表的每...

    C语言 数据结构之单链表基本操作

    单链表的各种操作,适合于初学,也适合于复习 单链表操作介绍 1. 创建头节点 ...12. 面试中常见:单链表翻转 13. 已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序,要求用递归方法

    PTA1025 反转数组(启发式思路)

    1. **数据存储**:创建一个足够大的结构体数组`Node a[N]`,用于模拟链表节点。每个结构体包含三个字段:`data`存储节点的数据,`address`存储节点的地址,`next`存储指向下一个节点的地址。 2. **输入处理**:从...

    LeetCode解题心得——反转链表(python)

    堆栈法通过创建一个堆栈,将链表的所有节点依次压入堆栈。当链表遍历完成后,堆栈顶部的节点就是原链表的最后一个节点,将其设为新链表的头节点。然后,依次弹出堆栈中的节点,将其next指针指向堆栈中的下一个节点...

    PHP实现单链表翻转操作示例

    在测试代码中,我们创建了一个长度为10的链表,然后使用上述两种方法之一进行翻转,并输出翻转后的链表。这有助于验证翻转操作的正确性。 ```php function test() { // 创建链表 $head = new Node(0); // ... ...

    纸牌游戏数据结构设计

    `main()`函数组织了游戏流程,包括链表的创建、翻牌算法的调用以及最终结果的输出。 #### 调试分析与性能考量 在实际运行中,该算法的时间复杂度为O(n^2),其中n为牌的数量。这意味着随着牌数的增加,算法的执行...

    纸牌游戏的课程设计报告

    - 使用尾插法创建链表,函数原型如下: ```c LinkList* creat(int k); ``` - 函数参数`k`表示链表中节点的数量,即52。 3. **翻牌函数**: - 遍历链表,根据基数翻转符合条件的牌。 - 函数原型如下: ```c ...

    数据结构中单链表的实现

    2. 初始化链表:创建链表时,我们需要创建一个头节点,其next指针通常初始化为NULL,表示链表为空。 ```c Node* createEmptyList() { Node* head = (Node*)malloc(sizeof(Node)); head-&gt;next = NULL; return ...

    数据结构课程设计报告—纸牌游戏.pdf

    该设计使用了一个抽象数据类型 ADT LNode 来定义链表的节点,并使用了函数 InitList 和 Creater 来初始化链表和创建链表的节点。 课题设计 3:商品货架管理 该设计旨在解决商品货架管理问题,即设计一个算法,每一...

    一般的C语言习题百例

    36. 链表创建:动态内存分配创建链表节点。 37. 链表反向:通过改变节点指针实现链表反向。 38. 链表合并:连接两个链表头部,形成新的链表。 39. 求和函数:指针作为参数,计算部分和。 40. 字符串排序:字符串字符...

    西工大c语言

    在这个问题中,程序创建了一个双向链表,其元素为包含一个double类型值和一个指向下一个节点的指针的结构体。程序首先读取输入的数值,然后构建链表,直到输入的数值为负数为止。链表的每个节点都通过指针连接,最后...

    数据结构实验报告 哈弗曼编码建立 建立二叉树 纸牌游戏 文章编辑

    通过定义结构体`Lnode`,包含系数`coef`和指数`exp`,创建了一个链表来表示多项式。`input()`函数用于输入多项式项,`add()`和`minus()`函数分别执行加法和减法操作。这些函数使用了链表的基本操作,如尾插法建立...

    数据结构及算法实训内容及要求.pdf

    - **显示**:遍历链表输出所有元素。 - **查找**:在链表中查找特定元素,记录比较次数。 - **插入**:在链表中插入元素,需要调整指针关系。 - **删除**:删除链表中的元素,同样涉及指针更新。 - **逆置**:...

    python如何实现单链表的反转

    在`__main__`部分,我们创建了一个包含9个节点的链表,并调用`Reserver`函数进行反转,然后打印出反转后的链表元素,以验证反转操作的正确性。 总结来说,单链表的反转是通过迭代或递归的方式,改变节点间的连接...

    数据结构课程设计报告

    学生需要编写输入函数创建二叉树,然后实现层次遍历和先序遍历的输出函数。这要求理解二叉树的存储结构,以及遍历算法的实现。 主控模块设计包括需求分析、总体思路和程序流程。用户界面显示主菜单,允许用户选择...

    c语言对对碰游戏源码.rar

    这些库提供了在终端输出彩色字符、接受键盘输入等功能,使得在命令行界面下也能创建交互式的游戏体验。 此外,考虑到游戏的重玩功能,源码中可能包含了初始化游戏状态的函数,用于重新洗牌并设置所有卡片为未翻转...

Global site tag (gtag.js) - Google Analytics